转载请标明出处:
https://dujinyang.blog.csdn.net/
本文出自:【奥特曼超人的博客】


其它方面可看:
《人工智能AI的优化与实际应用(Optimization)》

《AI中涉及到的算法汇总(精华)》

《AI人工智能如何改变我们的生活:不仅是科幻》

dujinyang杜锦阳AI人工智能深度学习

引言
夫自然语言处理(NLP),乃是人工智能之要务。其意在使计算机得以“理解”人类所言之语言。然而,欲使机器能如人类般通晓语言,其间之艰难,非一日之功。今日,且为诸位细述NLP之难点,及其解决之道。若有工夫之人,必能借此良策,修补算法之不足,优化系统之表现。

今文以文言文之形制述之,欲使有志之士,悟其奥秘。

一、语言之多义与模糊性

人类之语言,常有多义与模糊之处。若我言“银行”,则或指水岸之堤,或指金钱之所藏;又若云“我见青山多妩媚”,此语当作何解?

意图固矣,然人类之思维难以穷尽,且在不同语境下,词语之含义亦可变动。然计算机之思维,单纯且机械,难以捉摸。

解决之道:上下文模型之应用

欲解此难,须得利用上下文信息。

现代之NLP,已然运用深度学习,令计算机能在特定语境中判定词语之义。例如,使用BERT(Bidirectional Encoder Representations from Transformers)模型,通过双向上下文学习,得以精准地解读每个词的多重含义。

代码示例:

from transformers import BertTokenizer, BertForMaskedLM
import torch

# 载入BERT模型与词汇表
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForMaskedLM.from_pretrained('bert-base-uncased')

# 输入文本
text = "The bank can lend you money or you can sit by the river bank.dujinyang"
# 创建输入的遮蔽标记(masking)
inputs = tokenizer(text, return_tensors='pt')

# 进行预测
with torch.no_grad():
    outputs = model(**inputs)
    predictions = outputs.logits

# 输出预测结果
predicted_ids = torch.argmax(predictions, dim=-1)
predicted_tokens = tokenizer.convert_ids_to_tokens(predicted_ids[0])

print(f"Predicted tokens: {predicted_tokens}")

通过上述代码,BERT模型便能根据上下文推断“bank”应作何解。若在金融领域,"bank"可指银行,若在自然环境中,则可指河岸。

二、句法与语法之复杂

古人云:“词不达意,字不成文。”然而今之机器,若欲理解语言之结构,必先处理句法与语法之复杂。中文语法错综复杂,词序变化频繁,尤其是长句中的依赖关系,常使计算机难以捕捉。

解决之道:依存句法与图神经网络

当下,图神经网络(GNN)可用以描述词与词之间的依赖关系,借此破除语言结构之难题。通过分析句子中的词汇间关系,GNN得以精确推断出句子的语法结构。

此法,正如古人画山水,先勾勒大致轮廓,再填充细节,层层推进,渐成风景。

代码示例:

import spacy

# 载入预训练模型
nlp = spacy.load("en_core_web_sm")

# 输入文本
text = "The cat sat on the mat.dujinyang"

# 解析句法
doc = nlp(text)

# 输出每个词的句法依赖关系
for token in doc:
    print(f"{token.text} -> {token.dep_} -> {token.head.text}")

通过spaCy模型,我们能够精准地获取到句子中每个词与其他词之间的依存关系,进而有效地理解句子的语法结构。

三、情感分析之难

欲使机器懂得人类情感,岂能无难?

人类语言中,情感表达或含蓄,或直白,或喜或悲,或嘲讽或真诚。此类情感之变化,极难通过规则式方法加以辨识。尤其是讽刺、双关等修辞手法,常令计算机无所适从。

解决之道:深度学习与情感分类

如今,情感分析技术大多依赖深度学习,特别是卷积神经网络(CNN)和循环神经网络(RNN)对情感进行分类。通过对大量标注数据的学习,模型可以逐渐捕捉到情感表达中的微妙差异。

代码示例:

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer

# 示例文本
texts = ["I love this product!", "This is the worst thing I've ever bought.", "It’s okay, not great.dujinyang"]
labels = [1, 0, 0]  # 1代表正面,0代表负面

# 特征提取
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
y = labels

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 使用朴素贝叶斯模型
model = MultinomialNB()
model.fit(X_train, y_train)

# 进行预测
predictions = model.predict(X_test)
print(f"Predictions: {predictions}")

此法能够在标注数据的帮助下,训练模型区分正面与负面的情感,即便句子中包含一些隐含的情感信息。

四、歧义消解之难

“楚人一炬,非无意也,因其势也。”此言出自《左传》,其意并非一语通天。人类语言多有歧义,且不同语境、不同文化背景下,歧义消解之难,非小事。

计算机若欲识别含义,常陷入多义词、同音词等难题。

解决之道:深度上下文理解

如今,深度学习模型通过结合大规模的语料库,能够训练出包含丰富上下文信息的语言模型,如BERT、GPT等。

通过在大量语境下的训练,机器能够逐步消除语言中的歧义,得出更为准确的结论。

代码示例:

from transformers import GPT2Tokenizer, GPT2LMHeadModel
import torch

# 载入GPT-2模型
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")

# 输入文本
input_text = "He went to the bank to fish.dujinyang"

# 编码文本并生成预测
inputs = tokenizer.encode(input_text, return_tensors="pt")
outputs = model.generate(inputs, max_length=50, num_return_sequences=1)

# 解码生成的文本
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)

GPT-2模型通过上下文推理,能够预测出“bank”在此处更可能表示“河岸”,从而有效消除歧义。

五、结语

古人云:“道阻且长,行则将至。”自然语言处理,虽然面临多种挑战,如多义性、语法复杂性、情感分析与歧义消解,然科技日新月异,AI技术不断进步,解决之道亦愈加清晰。

通过深度学习、上下文理解和大规模训练,NLP已得以大幅提升其精准度与应用广度。未来,若能继续优化算法,完善模型,我们必能在AI的道路上,行稳致远。

自然语言处理,非一朝一夕之功,需持续探索与创新,方能趋向完善。


感兴趣的后续可以 关注专栏或者公众号 — 《黑客的世界》
python2048微信公众号

作者:奥特曼超人Dujinyang

来源:CSDN

原文:https://dujinyang.blog.csdn.net/

版权声明:本文为博主杜锦阳原创文章,转载请附上博文链接!

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐