gpt4 book ai didi

machine-learning - 词嵌入模型

转载 作者:行者123 更新时间:2023-11-30 09:27:55 25 4
gpt4 key购买 nike

我一直在搜索并尝试实现一个词嵌入模型来预测单词之间的相似性。我有一个由 3,550 个公司名称组成的数据集,其想法是用户可以提供一个新单词(不会出现在词汇表中)并计算新名称与现有名称之间的相似度。

在预处理过程中,我去掉了停用词和标点符号(连字符、点、逗号等)。此外,我应用了词干提取和分隔前缀,希望获得更高的精度。然后像 BIOCHEMICAL 这样的单词最终会变成 BIO CHEMIC ,它是将单词分为两部分(前缀和词干)

公司名称的平均长度由 3 个单词组成,频率如下:

enter image description here

作为预处理结果的标记被发送到word2vec:

#window: Maximum distance between the current and predicted word within a sentence
#min_count: Ignores all words with total frequency lower than this.
#workers: Use these many worker threads to train the model
#sg: The training algorithm, either CBOW(0) or skip gram(1). Default is 0s
word2vec_model = Word2Vec(prepWords,size=300, window=2, min_count=1, workers=7, sg=1)

模型包含了词汇中的所有单词后,计算每个公司名称的平均句子向量: df['avg_vector']=df2.apply(lambda 行: avg_sentence_vector(row, model=word2vec_model, num_features=300, index2word_set=set(word2vec_model.wv.index2word)).tolist())

然后,保存向量以供进一步查找:

##Saving name and vector values in file
df.to_csv('name-submission-vectors.csv',encoding='utf-8', index=False)

如果经过预处理(删除停用词和标点符号)后词汇中不包含新的公司名称,那么我会再次创建模型并计算平均句子向量并再次保存。

我发现这个模型没有按预期工作。例如,计算最相似的单词 pet 得到以下结果:

ms=word2vec_model.most_similar('pet')

('fastfood', 0.20879755914211273)
('hammer', 0.20450574159622192)
('allur', 0.20118337869644165)
('wright', 0.20001833140850067)
('daili', 0.1990675926208496)
('mgt', 0.1908089816570282)
('mcintosh', 0.18571510910987854)
('autopart', 0.1729743778705597)
('metamorphosi', 0.16965581476688385)
('doak', 0.16890916228294373)

在数据集中,我有诸如“paws”或“petcare”之类的单词,但其他单词正在与 pet 单词建立关系。

这是 pet 的较近单词的分布:

enter image description here

另一方面,当我使用 GoogleNews-vectors-negative300.bin.gz 时,我无法向词汇中添加新单词,但 pet 和周围单词之间的相似性正如预期的那样:

ms=word2vec_model.most_similar('pet')
('pets', 0.771199643611908)
('Pet', 0.723974347114563)
('dog', 0.7164785265922546)
('puppy', 0.6972636580467224)
('cat', 0.6891531348228455)
('cats', 0.6719794869422913)
('pooch', 0.6579219102859497)
('Pets', 0.636363685131073)
('animal', 0.6338439583778381)
('dogs', 0.6224827170372009)

这是最近单词的分布:

enter image description here

我想听听您对以下问题的建议:

  • 此数据集是否适合继续使用此模型?
  • 数据集的长度是否足以让 word2vec“学习”单词之间的关系?
  • 我可以采取哪些措施来改进模型,使 word2vec 创建与 GoogleNews 相同类型的关系,例如在相似单词之间正确设置单词 pet
  • 考虑到当前数据集的性质,实现其他替代方案(例如 fasttext)是否可行?
  • 您知道有哪些公共(public)数据集可以与当前数据集一起使用来创建这些关系吗?

谢谢

最佳答案

3500 条文本(公司名称),每条文本只有约 3 个单词,总共只有大约 10k 个训练单词,唯一单词的词汇量要小得多。

这对于 word2vec 及相关算法来说非常非常小,它们依赖大量数据和充分多样化的数据来训练有用的向量排列。

通过使用比默认epochs=5个训练周期,并且小得多,您可以从有限的数据中提取一些有意义的训练 em> 向量比默认的 size=100。通过这些调整,您可能会开始看到更有意义的 most_similar() 结果。

但是,目前尚不清楚 word2vec,特别是您的平均姓名单词比较中的 word2vec 是否与您的最终目标相匹配。

Word2vec 需要大量数据,不考虑子词单元,并且无法描述训练期间未见过的单词标记。多个单词向量的平均值通常可以作为比较多单词文本的简单基线,但与其他方法相比也可能会削弱某些单词的影响。

需要考虑的事项可能包括:

  • 与 Word2vec 相关的算法(例如 FastText)也可以学习子词单元的向量,因此可以为训练中未见过的单词引导不太糟糕的猜测向量。 (但是,这些也需要大量数据,并且要在小型数据集上使用,您需要再次减小向量大小,增加纪元,并另外减少用于子词学习的存储桶数量。)

  • 对多词文本进行更复杂的比较,例如“词移动器的距离”。 (对于较长的文本,这可能相当昂贵,但对于只有几个单词的名称/标题可能很实用。)

  • 寻找更多与您的目标相符的数据,以建立更强大的模型。更大的公司名称数据库可能会有所帮助。如果您只想让分析理解英语单词/词根,更通用的训练文本也可能有效。

  • 对于许多目的来说,单纯的词典比较(编辑距离、共享字符 n-gram 的计数)也可能有帮助,尽管它无法检测所有同义词/语义相似的单词。

关于machine-learning - 词嵌入模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58230214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com