随着深度学习的进步和数据的可用性,自然语言处理(NLP)在处理自然语言方面取得了巨大进展。尽管NLP的应用看似多样化,但在当前能够处理的“自然语言”种类上却是有限的。
让来玩一个游戏!会向抛出一个词,然后说出现在脑海中的第一个词。准备好了吗?开始!那么,想到了什么?可能是一个庞大的文本语料库?摘要生成?还是一个诗歌生成模型?无论它是什么,敢肯定所有这些都是用英语进行的。在处理NLP时,人们倾向于将“自然语言”和“英语”等同起来。正如其名称所强调的,自然语言处理的范畴并不局限于任何一种语言。鉴于当前的研究和资源状况,很明显印度语言在NLP中被研究不足,代表性不足。本文旨在深入探讨印地语等印度语言在NLP中的复杂性,并探索可用的工具。那么,让开始吧!
有人可能会争辩说,由于通常在NLP中使用嵌入技术,为什么不能使用与英语相同的技术呢?然而,这是不可行的——自然语言往往具有结构差异。为了更好地理解,以下是英语和印地语之间的一些差异方式:
1. 主谓宾与主宾谓结构差异:英语句子遵循主谓宾(SVO)结构,而在印地语中,句子遵循主宾谓(SOV)结构。下面是一个例子:
2. 介词与后置词:英语使用“介词”作为格标记,即表示位置的词出现在它所指的位置之前。另一方面,印地语使用“后置词”作为格标记,即表示位置的词出现在它所指的位置之后。下面是一个例子:
3. 词序的灵活性:在印地语中,词的顺序并不总是重要的,即改变词的顺序不会改变句子的含义。下面是一个例子:
这些只是印地语和英语之间的一些语言差异,导致在执行NLP操作时需要对两者进行不同的处理。
除了刚刚看到的结构差异之外,印度语言的NLP还有更多的挑战。以下是一些挑战:
1. 印度语言缺乏语料库和资源。
2. 缺乏教育和培训机构。
3. 由于方言变化,印度语言存在歧义。
4. 印度语言的使用受到地理限制。
现在已经了解了印度语言NLP的复杂性和挑战,是时候探索iNLTK(印度语言自然语言工具包)了。都知道流行的NLP库NLTK;iNLTK为印度语言扩展了一些有用的能力。
安装:
pip install inltk
作为依赖项,需要安装Pytorch版本1.3.1,如下所示:
pip install torch==1.3.1+cpu -f https://download.pytorch.org/whl/torch_stable.html
语言:
iNLTK允许用户处理多种自然语言。这些语言及其代码如下所示:
导入和设置:
一旦导入了iNLTK库,首先需要设置语言。假设想对印地语文本执行NLP操作,那么这就是如何导入和设置的:
from inltk.inltk import setup
setup('hi') #印地语
请注意,需要在使用语言的第一次进行设置;它会将要求下载到系统中。一旦完成,就不需要再次设置。
分词是指将文本分解为可以进一步用于向量化/生成嵌入的较小单元。iNLTK提供了一个内置函数来分词文本数据。
from inltk.inltk import tokenize
text = 'काम को समय पर पूरा करना सबसे अच्छा है।'
tokenize(text, 'hi')
输出:
['काम', 'को', 'समय', 'पर', 'पूरा', 'करना', 'सबसे', 'अच्छा', 'है', '।']
文本嵌入是文本数据的向量化表示,可以输入到机器/深度学习模型中进行训练。iNLTK提出了一个函数,用于生成属于可用语言的文本的嵌入。
from inltk.inltk import get_embedding_vectors
text = 'काम को समय पर पूरा करना सबसे अच्छा है।'
vectors = get_embedding_vectors(text, 'hi')
print(vectors)
输出:
[
[-0.084885, 0.014608, 0.224804, -0.403952, ..., -0.174789, -0.143138, 1.049093, 0.608228], dtype=float32),
[-0.254694, -0.020739, 0.008523, -0.348004, ..., 0.709753, -0.114417, 0.637649, -2.84761 ], dtype=float32),
...
]
接下来,词预测是NLP中的一个传统问题。顾名思义,给定一个句子/句子的一部分,尝试找出下一个可能的词。iNLTK通过提供一个函数来简化这个问题。
from inltk.inltk import predict_next_words
text = 'काम को समय पर पूरा करना'
n=3 #n是要预测的词的数量
predict_next_words(text, n, 'hi')
输出:
काम को समय पर पूरा करना पड़ता है !
(注意:这个输出每次运行代码时可能会有所不同)
iNLTK提出了一个函数,可以根据输入的句子生成相似的句子,如下所示:
from inltk.inltk import get_similar_sentences
text = 'काम को समय पर पूरा करना सबसे अच्छा है।'
n=5 #想生成的相似句子的数量
get_similar_sentences(text, n, 'hi')
输出:
[
'काम को समय पर पूरा रखना सबसे अच्छा है।',
'काम को वक़्त पर पूरा करना सबसे अच्छा है।',
...
]
(注意:这个输出每次运行代码时可能会有所不同)
可以使用iNLTK来检查两个句子的相似性,并得到它们的相似性分数。这次让试试印地语以外的其他语言。
from inltk.inltk import get_sentence_similarity
text1 = 'সময়মতো কাজ শেষ করা ভালো'
text2 = 'সময়মতো কাজ করাটা দারুণ'
get_sentence_similarity(text1, text2, 'bn')
请确保在使用环境中的第一次使用时将语言设置为‘孟加拉语’(bn)。
输出:
0.3882378339767456
这只是iNLTK提供的几种应用;更多信息,应该查看iNLTK的官方文档。
尽管自然语言处理在印度语言上要达到与英语相当的水平还有很长的路要走,但本文探讨了可用的工具,并评估了现有的限制。以下是在本文中学到的快速回顾:
由于结构差异,英语NLP技术不能直接应用于印度语言。
资源、语料库和培训机构的缺乏是印度NLP面临的主要挑战。