我正在使用词嵌入模型(通过Gensim库的FastText)来扩展搜索条件。 因此,基本上,如果用户编写“操作系统”,我的目标是使用非常相似的术语(例如“ os”,“ windows”,“ ubuntu”,“ software”等)来扩展该术语。
该模型运行良好,但是现在是时候使用“外部信息”,“外部信息”来改进模型了,我的意思是OOV(词外)术语或没有好的上下文的术语。< / p>
按照我上面在用户编写操作系统时所写的示例,我想使用“通用”术语来扩展查询:
FastText模型中内置的术语:
AND
代表(组织/公司)的术语,例如“ Microsoft”,“ Apple”,因此完整的查询将是:
我的问题是,我在语料库中没有公司,或者,如果存在的话,我没有太多的上下文可以将Microsoft“链接”到“操作系统”。
例如,如果我在语料库中提取一块,我会读到“ ...我从2000年11月开始和我的朋友John ...一起在Microsoft工作”,因此,如您所见,我无法将“ Microsoft”上下文化因为我确实没有很好的背景。
简短回顾:
我需要做什么:
我想将这些公司包括在我的FastText模型中,并“手动”设置其词“上下文/相关术语云”。
想法?
答案 0 :(得分:1)
没有简单的方法来做到这一点。 The FastText algorithm使用字符级信息,因此可以推断出看不见的单词的嵌入。这就是FastText论文关于表示单词的意思:
但是,这仅在您可以从了解零件中推断出它们含义的单词中才有意义。例如,如果您对“ walk”具有可靠的嵌入,但对于“ walking”却没有可靠的嵌入,并且有很多以“ ing”结尾的单词,FastText将能够推断出嵌入。但这显然不适用于“ Microsoft”之类的词。
您能做的最好的事情是在包含您希望模型使用的词的数据上训练嵌入,这些词应尽可能相似。如果您的文字是英语,则tt不会太难。
答案 1 :(得分:1)
这些类型的模型需要大量不同的用法示例,以将令牌放置在相对良好的位置,并且与其他相关令牌的距离/方向都有意义。如果您没有此类示例,或者您的示例很少/很差,则该算法几乎无济于事。
先验,如果您以某种方式知道'microsoft'
应该出现在某些特定的矢量坐标中,那么可以肯定的是,您可以修补模型以包括该word-> vector映射。 (尽管,这类模型类通常不包括用于此类增量添加的便捷方法,因为期望单词是从语料库中大量训练的,而不是个别地规定的。)
但是,如果您没有某些标记范围的示例文本(例如公司名称),那么您可能对这些标记应位于的位置也没有独立的想法。
确实,您需要找到足够的培训数据。然后,假设您希望这些新术语的向量在“相同空间”中并与您现有的词向量可比,请将其与先前的数据进行组合,并将所有数据一起训练为一个组合模型。 (此外,对于像FastText这样的算法来为从未见过的OOV单词合成合理的猜测向量,它需要大量具有重叠含义和重叠n-gram片段的单词示例。)
扩展语料库以获得针对100个目标组织名称的更好的训练数据,可能就像从包含可用资源(如Wikipedia或网络)中抓取句子/段落那样简单。
通过在真实语言环境中收集数十个(甚至更好的数百个或数千个)组织名称的独立示例,并且由于这些上下文包括许多相互共享的其他单词或其他相关组织的名称,您将成为能够为这些术语和相关术语引入合理的向量。