我正在使用一个单词嵌入模型(FastText通过Gensim库)来扩展搜索的术语。所以,基本上,如果用户写“操作系统”,我的目标是用"os“、"windows”、"ubuntu“、"software”等非常相似的术语来扩展这个术语。
这个模型运行得很好,但是现在是用“外部信息”改进模型的时候了,我指的是OOV (词汇外)术语或没有良好上下文的术语。
按照我在上面写操作系统时所写的示例,我想用“通用”术语展开查询:
在FastText模型中构建的术语:
和
表示(组织/公司)的术语如"Microsoft“、"Apple”,因此完整的查询如下:
我的问题是,我在语料库中没有公司,如果有,我不需要太多的上下文来“链接”微软和“操作系统”。
例如,如果我在语料库中提取一篇文章,我可以读到“.我从2000年11月开始和我的朋友John一起在微软工作.”因此,正如您所看到的,我不能将"Microsoft“字上下文化,因为我确实没有良好的上下文。
小偷小摸:
我需要做的是:
我希望将这些公司包括在我的FastText模型中,并“手动”设置它们的单词上下文/相关术语云集。
想法?
发布于 2019-04-11 11:17:20
要做这件事没有简单的办法。FastText算法使用字符级别的信息,因此它可以推断未见单词的嵌入。这是FastText的论文所说的,代表了以下几个字:

然而,这只有在单词的情况下才有意义,在这种情况下,你可以从了解部分中推断出它们的含义。例如,如果您有一个可靠的“步行”嵌入,而不是“行走”,并且有大量以"ing“结尾的单词,FastText将能够推断嵌入。但这显然不能适用于“微软”这样的词。
你能做的最好的事情就是把你的嵌入训练在包含你希望模型尽可能相似的词的数据上。如果你的课文是用英语写的,那就不会太难了。
发布于 2019-04-11 13:56:53
这些类型的模型需要大量不同的使用示例才能将令牌放置在相对好的位置,在与其他相关令牌的有意义的距离/方向上。如果你没有这样的例子,或者你的例子很少/很差,那么算法就没什么用处了。
如果你事先知道'microsoft'应该出现在某个特定的矢量坐标中,那么当然,你可以对模型进行补丁,以包含那个单词->向量映射。(尽管如此,这类模型类通常没有为这种增量添加提供方便的方法,因为预期的单词是从corpuses中大量训练出来的,而不是单独指定的。)
但是,如果您没有一些标记的示例文本,比如公司名称,那么您可能也没有独立的想法来说明这些标记应该在哪里。
真的,你需要找到足够的培训数据。然后,假设你想把这些新术语的向量放在“同一个空间”,并与你现有的单词向量相比较,把它和你以前的数据结合起来,把所有的数据训练成一个组合的模型。(此外,对于像FastText这样的算法,要为从未见过的OOV单词合成合理的猜测向量,需要大量具有重叠含义和重叠字符n克片段的单词示例。)
扩展你的语料库,以获得更好的培训数据,比如说100个目标组织名称,可能就像抓取句子/段落一样简单,包括那些从现有的来源,比如维基百科或网络上找到的名字。
通过收集数十个(甚至更好的数百甚至数千个)真实语言上下文中的组织名称的独立示例,并且由于这些上下文包含许多相互共享的其他单词,或者其他相关组织的名称,您就可以为这些术语和相关术语归纳出合理的向量。
https://stackoverflow.com/questions/55629368
复制相似问题