RAG 场景下提供精确的一个手法就是使用 Hybrid Search,Hybrid Search的另外一个检索就是全文检索。
使用 Elastic Search 进行全文检索的方案应该比较成熟,但是我这次方案中要使用的是 Oracle Text,而且语言是日本语。
在日本同事的帮助之下,定位到 GiNZA 这个日本语自然语言处理中的分词库。
接下来就开始学习学习 GiNZA 吧。
MeCab
MeCab是由京都大学信息学研究科和日本电信电话株式会社(NTT)通信科学基础研究所联合研究小组开发的开源形态素分析引擎。
Janome
Janome是一个用纯Python编写的、内置词典的形态素分析器。
无需依赖任何其他库就可以轻松安装,并提供简单易用的API,适合嵌入到应用程序中。
GiNZA
GiNZA是一个日语自然语言处理库。
它起源于英语等主要语言的自然语言处理框架spaCy,可以视为spaCy的日语版本。
JUMAN
JUMAN是由京都大学开发的形态素分析工具。
它旨在为从事日语分析研究的众多学者提供一个通用的形态素分析工具。
考虑到学校语法不太适合计算机处理,JUMAN允许用户轻松定义语法和词之间的连接关系。
Sudachi
Sudachi是由WorksApplications徳岛人工智能NLP研究所开发的形态素分析器。
Sudachi主要执行以下三个处理步骤:
(参考)SentencePiece
SentencePiece是一个用于神经网络文本生成系统的无监督文本标记器和去标记器。
它可以在训练神经网络模型之前确定词汇表大小。
它直接从原始文本中训练。
使用SentencePiece可以创建一个纯粹的端到端系统,不依赖于特定语言的预处理/后处理。
GiNZA 是 Megagon Labs 与日本语言研究所联合研究于 2019 年 4 月发布的开源日语自然语言处理库。
我总结了GiNZA的特点如下。
此外,默认安装了名为“SudachiDict”的词典,因此您可以通过安装一个 GiNZA 轻松开始日语自然语言处理。
GiNZA 最初采用了一种基于 CNN 的学习模型,称为 ja_ginza 。
ja_ginza_electra 从v5.0开始就可用,使用深度学习模型Transformer。
ja_ginza_electra 是分析处理速度低于 ja_ginza 的模型,但分析精度较高。
示例代码1,
import spacy
print(f"===ja_ginza_electra===")
nlp = spacy.load('ja_ginza_electra')
doc = nlp('夏の全国高等学校野球選手権大会に出場する')
for token in doc:
print(token)
输出,
夏
の
全国
高等学校
野球
選手権
大会
に
出場
する
示例代码2,
import spacy
# GiNZAでルール追加
nlp = spacy.load('ja_ginza_electra')
nlp.add_pipe(factory_name='entity_ruler', config={"overwrite_ents": True}, last=True)
# Create an EntityRuler with overwrite entities enabled
patterns = [{'label': 'Person', 'pattern': '母'},
{'label': 'Person', 'pattern': '父'}]
ruler = nlp.get_pipe('entity_ruler')
ruler.add_patterns(patterns)
doc = nlp('小学生のサツキと5歳のメイの二人は、母の療養のために父と一緒に初夏の頃に3丁目に引っ越してくる。')
# Print the entities found in the text
for ent in doc.ents:
print(
f"{ent.text},{ent.label_},{ent.label_},{ent.start_char},{ent.end_char}" # Using f-string for better readability
)
输出,
小学生,School_Age,School_Age,0,3
サツキ,Name_Other,Name_Other,4,7
5歳,Age,Age,8,10
メイ,Name_Other,Name_Other,11,13
二人,N_Person,N_Person,14,16
母,Person,Person,18,19
父,Person,Person,26,27
初夏,Date,Date,31,33
3丁目,Facility_Part,Facility_Part,36,39
完结!