我试图建立一个搜索引擎来查询一个文件夹的文件。在线教程建议,我们应该通过对所有单词的向量进行平均来获得文档的向量,然后将相似度与查询的向量进行比较。
我是否可以知道,文件中所有词语的向量如何保留这些词语的信息?
如果我检索查询中类似的单词并检查这些单词是否在每个文档中,会更好吗?
发布于 2021-10-07 14:06:18
我们应该通过对所有单词的向量进行平均来获得文档的向量。
情况不一定是这样。但这无疑是一种方便的方法。特别是,它的主要优点是避免了由于不同文档长度不同而产生的问题。通过获得单个最终向量,我们确保可以比较任意长度的任何文档。使用单词向量进行连接或执行其他操作可能会迫使您定义最大长度和衬垫更短的文档/修剪更长的文档。最后一个注意事项是,通常从文档中删除停止词是一种很好的做法,也就是最常见的没有提供太多语义意义的单词。
我是否可以知道,文件中所有词语的向量如何保留这些词语的信息?
这取决于你如何获得单词向量。如果您只执行一个热编码,那么执行一个平均值实际上是没有意义的,因为您将从二进制表示中生成实数。因此,我假设您计划使用通过word2vec、skipgram、手套或其他深入学习模型生成的嵌入。在这种情况下,要理解为什么平均提供有用的信息,首先需要了解这些模型是如何将单词转化为向量的。广泛的解释超出了问题的范围,所以为了保持简洁:密集表示允许用单词做简单的数学。当将单词转化为密集表示时,相似的词将被转化为相似的(空间上接近的)向量。当然,根据所选择的模型,也会有不同的地方。例如,Skipgram在捕捉语义方面比word2vec更好,而word2vec仍然编码了相当多的语法相似性,所以如果比较两个谈论名人星球的文档,两者都可能包含"star“一词,但是跳过图模型可能能够更好地区分文档,因为start在编码这两个领域的维度上会有更多的倾斜值,而文档中的其他单词将提供信息来提升正确的维度,而语法更多的模型将很难区分文档,因为语法上、开始和类似的词都是以类似的方式使用的。
如果我检索查询中类似的单词并检查这些单词是否在每个文档中,会更好吗?
您当然可以尝试这样做,但是它的性能不会比使用任何密集表示更好。原因是词汇本身根本没有提供关于它们之间的上下文关系的信息。例如,“苹果”可能出现在商店清单、苹果产品的评论中,或者甚至可以被用作药品的俚语。
https://datascience.stackexchange.com/questions/102888
复制相似问题