当前位置: 首页 > news >正文

淘宝客网站模板购买山东专业企业网站建设

淘宝客网站模板购买,山东专业企业网站建设,平邑县建设局网站,商务网站需求说明书作者#xff1a;来自 Elastic Peter Straer 复合词在文本分析和标记过程中给搜索引擎带来挑战#xff0c;因为它们会掩盖词语成分之间的有意义的联系。连字分解器标记过滤器等工具可以通过解构复合词来帮助解决这些问题。 德语以其长复合词而闻名#xff1a;Rindfleischetik…作者来自 Elastic Peter Straßer 复合词在文本分析和标记过程中给搜索引擎带来挑战因为它们会掩盖词语成分之间的有意义的联系。连字分解器标记过滤器等工具可以通过解构复合词来帮助解决这些问题。 德语以其长复合词而闻名Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz 是德语词典中最长的单词 —— 对于没有准备好处理复合词的搜索引擎来说是一场噩梦。许多其他语言如荷兰语、瑞典语等也都有这个概念。甚至英语中也有一些这样的词语尽管程度较轻。想想 “sunflower” 或 “basketball”。 让我们讨论一下这些词语所带来的问题和挑战为什么这是一个问题以及如何解决它。 问题 在进行全文搜索时Elasticsearch 等搜索引擎会在查询和索引时分析文本并将文本转换为标记tokens。我们想要提取单词的含义而不是完全匹配字符串。对于我们的搜索我们不必担心兔子是在 “running” 还是在 “runs” —— 我们只是将单词简化为其词根形式“run”。 当我们处理复合词时如果我们不以某种方式解决它这个阶段就会失败。假设我们有一个包含文档的索引“Basketballs”。如果我们使用标准英语分析器来分析这一点我们会得到 GET _analyze {text: Basketballs, analyzer: english } 响应 {tokens: [{token: basketbal,start_offset: 0,end_offset: 11,type: ALPHANUM,position: 0}] } 在这个例子中复合词 “basketballs” 被标记化为 “basketbal”。虽然我们能够将其转换为小写并去除复数形式但我们无法捕捉到 “basketball” 也是一种 “ball” 的含义。现在如果我们在索引中搜索 “ball”我们希望能够找到 “basketball”但 “bal”经过分析并不匹配 “basketbal”因此我们没有得到任何结果 那么我们该如何解决这个问题呢 也许同义词有用 我们首先想到的可能是尝试使用同义词将不同的子词与复合词关联起来。由于复合词的使用相当有限这对于英语来说已经足够好了 basketball basketball, ball 现在我们来看看德语。语法的工作方式是将任意数量的单词组合起来形成一个更精确的单词。 Rind (cow - 牛) 和 Fleisch (meat - 肉) 变成 Rindfleisch (牛肉)。 Rindcow - 牛、Fleischmeat - 肉和 Etikettlabel - 标签变成 Rindfleischetikett牛肉标签。这个过程可以任意长直到我们得到诸如 Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz 之类的可爱的词语。 为了用我们的同义词文件解决这个问题我们必须对无限数量的单词排列进行建模 # cowmeat, cowmeatlabel, meatlabel rindfleisch rindfleisch, rind, fleisch rindfleischetikett rindfleischetikett, rind, fleisch, etikett fleischetikett fleischetikett, fleisch, etikett … 在德语等语言中这很快变得不切实际。所以我们必须从相反的角度来看待这个问题。我们不是从复合词开始寻找其复合词而是查看可用的复合部分并根据这些知识解构单词。 连字分解器 - Hyphenation Decompounder 连字分解器标记过滤器Hyphenation Decompounder Token Filter是一个 Lucene 标记过滤器它依赖连字规则来检测潜在的单词拆分。规则文件Rule files以对象格式化对象 (Objects For Formatting - OFFO) 格式指定我们也可以在其中找到一些示例文件。我们还需要一个单词列表用于将复合词分解为其子部分。单词列表可以内联提供但对于生产工作负载我们通常还会将文件上传到磁盘因为这些文件可能非常大并且通常包含整个词典。 可以根据其许可证提供的德语示例文件可在此存储库中找到。 那么它有什么作用呢 # word list: coffee, sugar, cup # text: coffee cup GET _analyze {tokenizer: standard,filter: [lowercase,{type: hyphenation_decompounder,hyphenation_patterns_path: analysis/hyphenation_patterns.xml,word_list: [kaffee, zucker, tasse]}],text: Kaffeetasse }Response:# coffee cup, coffee, cup [ kaffeetasse, kaffee, tasse] 这有助于确保搜索 “Tasse”杯子的用户能够找到包含较大复合词 “Kaffeetasse”咖啡杯的文档。 注意 查看此文章了解如何上传包以便能够在 Elastic Cloud Hosted 部署中访问这些文件。还有 Dictionary Decompounder它可以在没有连字规则的情况下执行相同的操作而是强制执行单词检测。对于大多数用例我们推荐使用连字分解器。 避免部分匹配 由于我们通常使用包含数千个单词的整本词典的单词列表因此分解器可能会使用默认设置以非预期的方式拆分单词从而导致不相关的匹配。 # word list: coffee, fairy, cup # text: coffee cup GET _analyze {tokenizer: standard,filter: [lowercase,{type: hyphenation_decompounder,hyphenation_patterns_path: analysis/hyphenation_patterns.xml,word_list: [kaffee, fee, tasse]}],text: Kaffeetasse }Response:# coffee cup, coffee, fairy, cup [kaffeetasse, kaffee, fee, tasse] 此示例在 “Kaffee”coffee - 咖啡中检测到 “fee”fairy - 仙女。这当然是意外的并非有意为之。另一个示例可能是 “Streifenbluse”striped blouse- 条纹衬衫其中会找到 “Reifen”tires - 轮胎。“Streifen”stripe - 条纹、“Reifen”轮胎和 “Bluse”blouse - 衬衫都是我们通常想要拆分的常用词。 我们的用户搜索 “fee”fairies - 仙女和 “reifen”tires - 轮胎时现在会找到 coffee 和 blouses这可不妙。 在 8.17 中hyphenation_decompounder 中添加了一个新的参数 no_sub_matches 来解决此问题。 # word list: coffee, fairy, cup # text: coffee cup GET _analyze {tokenizer: standard,filter: [lowercase,{type: hyphenation_decompounder,hyphenation_patterns_path: analysis/hyphenation_patterns.xml,word_list: [kaffee, fee, tasse],no_sub_matches: true}],text: Kaffeetasse }Response:# coffee cup, coffee, cup [kaffeetasse, kaffee, tasse] 这可以防止创建 “fee”fairy标记并且我们的搜索按预期工作 匹配所有查询 terms 根据我们目前所见搜索德语文本的索引映射可能类似于以下索引定义 PUT products {mappings: {properties: {full_text: {type: text,analyzer: german_analyzer_with_decompounding}}},settings: {analysis: {analyzer: {german_analyzer_with_decompounding: {type: custom,tokenizer: standard,filter: [lowercase,german_stop_words_filter,german_decompounder,german_normalization,german_stemmer]},german_analyzer_without_decompounding: { type: custom,tokenizer: standard,filter: [lowercase,german_stop_words_filter,german_normalization,german_stemmer]}},filter: {german_stop_words_filter: {type: stop,stopwords: _german_},german_decompounder: {only_longest_match: true,word_list_path: dictionary/dictionary.txt,type: hyphenation_decompounder,hyphenation_patterns_path: dictionary/hyphenation_patterns.xml},german_stemmer: {type: stemmer,language: light_german}}}} } 注意在实际生产环境中其中很可能会有围绕 asciifolding、表情符号过滤器emoji filters或同义词synonyms的过滤器但这已经是一个很好的起点应该会为德语文本获得良好的结果。 当搜索多个术语时我们通常会期望不考虑高级查询放松策略我们指定的所有搜索词都包含在我们的结果中。因此当在电子商务商店中搜索 Lederjackeleather jacket - 皮夹克时我们希望我们的产品是皮革制成的夹克而不是皮革制品和夹克的随机组合。 实现此目的的方法是将搜索查询中的运算符设置为 AND。所以我们这样做并在我们的产品中搜索 “Lederjacke”皮夹克 GET products/_search {query: {match: {full_text: { query: lederjacke, operator: and }}} } # returns all leather products and all jackets 令人惊讶的是这并不像我们预期的那样。我们找到了所有含有皮革或夹克的产品。这是因为运算符在标记化之前进行评估并且使用 OR 评估标记过滤器生成的标记。 为了解决这个问题我们需要在应用程序中分解我们的术语。我们可以先调用 _analyze API然后将分解后的术语传递给我们的搜索查询。因为我们已经分解了所以我们在过滤器链中使用了没有分解器过滤器的搜索分析器search analyzer。 GET _analyze {tokenizer: standard,filter: [lowercase,{type: hyphenation_decompounder,hyphenation_patterns_path: analysis/hyphenation_patterns.xml,word_list_path: analysis/word_list.xml,no_sub_matches: true}],text: Lederjacke }Response: [leder, jacke]GET products/_search {query: {match: {full_text: { query: leder jacke,operator: and,analyzer: german_analyzer_without_decompounding}}} } # returns only leather jackets 搜索分解词的替代方法 虽然 Elasticsearch Serverless 具有根据负载动态扩展的能力为搜索应用程序带来了许多巨大优势但在撰写本文时目前无法上传文件并在这些项目中使用连字分解器。 替代工具 可以在 Elastic 堆栈之外使用的替代方案是适用于 Java 的 JWordSplitter 和 CharSplit 模型或 CompoundPiece 模型它们采用机器学习方法分解单词而无需配置文件。 以下是如何将 CompoundPiece 与 Hugging Face 转换器库一起使用 from transformers import pipeline pipe pipeline(text2text-generation, modelbenjamin/compoundpiece) result pipe(Lederjacke, max_length100) print(result[0][generated_text].split(-))STDOUT: [Leder, Jacke] 它支持 56 种语言并且无需配置文件即可工作这是实现多语言应用程序分解的好方法。 语义搜索 我们在这里的许多文章中都涵盖了使用文本嵌入模型的语义搜索。这些模型能够解释文本的含义可以通过将文档和查询转换为向量并找到与查询最接近的文档来进行搜索。 将此处讨论的词汇搜索与向量搜索相结合称为混合搜索。这也有助于大大提高结果的质量并解释文本中复合词背后的含义。 结论 分解是构建有效的多语言搜索应用程序的重要工具 - 尤其是涉及德语等语言时。通过使用连字符分解器等工具我们可以确保我们的搜索能够理解复合词背后的含义为用户提供更好、更相关的结果。 与对搜索算法的任何调整一样评估其对搜索性能的整体影响非常重要。通过浏览我们关于 _eval API 的文章了解有关如何客观衡量搜索结果质量的更多信息。 Elasticsearch 包含许多新功能可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息开始免费云试用或立即在本地机器上试用 Elastic。 原文How to search languages with compound words - Elasticsearch Labs
http://www.hkea.cn/news/14481110/

相关文章:

  • 福建省城乡建设官方网站凡科教育
  • 互联网网站样式地方门户网站建设多少钱
  • 怎样跟网站做优化呢建设银行网站注销
  • 儿童网站源码自己做的网站图片挡住了导航栏
  • 如何将数据库导入网站简述网站建设的作用
  • 建站公司哪家做出来的网站好上海庭院景观设计公司
  • 电子商务网站建设和运营莒县城阳网站建设
  • 注册公注册公司流程和费用seo竞价推广
  • 网站建设的重点难点鞍山网站建设鞍山
  • 西安专业网站排名优化wordpress改字体大小
  • 简述网站制作的流程网站在线设计
  • 充电网站建设方案宁波seo优势
  • 莱芜网站建设流程研究院网站建设的内容
  • 做网站中心弹幕网站开发难么
  • 做的时间长的网站制作公司哪家好综合网页设计
  • 网站开发常遇到的问题有哪些怎么做网站多少钱
  • 网站建设与网页制作模拟试题制作壁纸的软件
  • 蒲城网站建设上海企业响应式网站建设推荐
  • 汽车网站建设分析报告哪个做网站平台好
  • 烟台网站定制排名网站app怎么制作教程
  • 美容医疗手机网站模板wordpress 主题够买
  • 比较好的网站开发公司电话珠海视窗网
  • 用自己的手机做网站wordpress 性能分析
  • 网站建设的出发点wordpress 木马 查
  • 电脑店免费建站wordpress分享缩略图不显示图片
  • 重庆网站建设的价格商城式网站具备哪些功能吗
  • 案列网站意识形态 加强网站建设
  • 石家庄网站设计网站维护网站后台访问权限设置
  • 官方网站后台怎样做超链接手机网站开发介绍
  • 开发网站开发工程师招聘常德百度推广