倒排索引可以在一个条目中包含多个单词吗?

Can inverted index have multiple words in one entry?

在信息​​检索中,倒排索引的条目是语料库中的词,每个词都有一个posting list,即它出现的文档列表。

如果应用词干提取,索引条目将是一个词干,因此如果多个单词共享相同的词干,它们最终可能会映射到同一个条目。例如:

没有词干提取:

(slowing) --> [D1, D5, D9,...]

(slower) --> [D9, D10, D20,...]

(slow) --> [D2,...]

有词干提取:

(slow) --> [D1, D2, D5, D9, , D10, D20...]

我想避免词干提取,而是希望将倒排索引中的每个条目都作为词袋(变形),例如(慢、慢、慢、慢、慢、最慢)。例如:

(slow, slows, slowing, slowed, slower, slowest) --> [D1, D2, D5, D9, , D10, D20...]

可不可行?

简答: 只需避免根据您的需求进行词干提取,而不会将 slowslows 视为匹配项。

长答案:

问题: I want to avoid stemming, and instead would like to make each entry in my inverted index as a bag of words (inflections) such as (slow, slows, slowing, slowed, slower, slowest).

让我试着消除​​您对倒排列表的一些困惑。它是存储在每个术语(而不是术语本身)的帖子中的文档

这些词通常存储在内存字典中(使用散列-table 或特里树实现),其中包含指向存储和加载的帖子(包含该特定术语的文档列表)的指针来自辅助存储的苍蝇。

一个简单的例子(不显示文档权重):

(information) --> [D1, D5, D9,...] (informative) --> [D9, D10, D20,...] (retrieval) --> [D1, D9, D17,...] ..

所以,如果您不想应用词干提取,那很好......事实上,上面的示例显示了一个 unstemmed 索引,其中单词 informationinformative 以未合并的形式出现。在合并的术语索引(使用词干分析器或词形还原器)中,您可以将不同的形式替换为等效的表示形式(比如 inform)。在这种情况下,索引将是:

(inform) --> [D1, D5, D9, D10, D20...]. --- union of the different forms (retrieval) --> [D1, D9, D17,...] ..

因此,这种合并表示匹配单词 information 的所有可能形式,例如informativeinformational

更长的答案

现在假设您想实现两全其美,即允许以用户控制的方式进行这种合并的表示,例如wrapping a word around quotes to denote requiring an exact match ("slow"vs.slowin the query), or some indicator to include synonyms for a query term for semantic search (e.g.syn(slow)` 以包含 slow 一词的同义词)。

为此,您需要为未合并的词维护单独的帖子,并在一组 equivalent (stem relation/synonym relation/ semantic relation etc.) 个术语之间维护额外的 equivalence indicating pointers

回到我们的例子,你会得到类似的东西:

(E1)-->(information) --> [D1, D5, D9,...]
 |---->(informative) --> [D9, D10, D20,...]
 |---->(data) --> [D20, D23, D25,...]


(E2)-->(retrieval) --> [D1, D9, D17,...]
 |---->(search) --> [D20, D30, D31,...]

..

在这里,我展示了两组术语 information, data...retrieval, search... 的等价 类(概念表示)的两个示例。 根据查询语法,在检索时可以促进精确搜索或轻松搜索(基于 inflections/synonyms 等)