gpt4 book ai didi

python - 如何通过匹配长度提高NGram的排名

转载 作者:行者123 更新时间:2023-12-03 01:30:11 26 4
gpt4 key购买 nike

我正在与Elasticsearch交手,并拥有一个包含许多带有共享Ngrams术语的小型数据集。

例如,当前Elasticsearch在排名
United Kingdom > Agriculture > Grains > Feed Wheat > Ex-Farm
比“肉”更好的搭配
United Kingdom > Agriculture > Livestock & Meat > Lamb > Deadweight
我相信,如果我可以让ES在其分数中考虑匹配的Ngram的长度,那么这个问题通常会自行解决。

我花了很多时间来寻找任何提示,但到目前为止没有任何进展。

我已经使用python的elasticsearch-dsl定义了我的Ngram过滤器

ngram_filter = token_filter(
'ngram_filter',
type='ngram',
min_gram=3,
max_gram=10,
)

ngram_analyzer = analyzer(
'ngram_analyzer',
type='custom',
tokenizer='whitespace',
filter=[
'lowercase',
ngram_filter
]
)

最佳答案

经过一会儿思考之后,我决定将NGram分析仪分成不同的 Realm ,按长度分开。这样,我可以手动提高更长的NGram匹配率。我想我在单一 Realm 尝试做太多事情。

我不是以编程方式使用django-elasticsearch-dsl来构建它们。

ngram_analyzers = {
f'{i}ngram': fields.TextField(
analyzer=analyzer(
f'{i}ngram_analyzer',
type='custom',
tokenizer='whitespace',
filter=[
'lowercase',
token_filter(
f'{i}ngram_filter',
type='ngram',
min_gram=i,
max_gram=i
)
]
)
) for i in range(3, 11)
}

ngram_analyzers.update({
'stemmed': fields.TextField(
analyzer='english',
)
})

关于python - 如何通过匹配长度提高NGram的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429136/

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