提升職業(yè)技能:了解并掌握這十大NLP技術(shù)

一、情感分析
情感分析是一種判斷文本背后情緒色彩的過(guò)程,例如推特、產(chǎn)品評(píng)論或客戶反饋。
情感分析的目標(biāo)是將文本分類為正面、負(fù)面或中性。例如,如果客戶寫了一篇產(chǎn)品評(píng)論,說(shuō)“非常棒,小孩子很喜歡”,情感分析算法會(huì)將文本分類為正面。情感分析廣泛應(yīng)用于電子商務(wù)、社交媒體和客戶服務(wù)等行業(yè),以深入了解客戶的意見(jiàn)和偏好。
執(zhí)行情感分析的一種方式是使用預(yù)訓(xùn)練模型,比如Python的nltk庫(kù)提供的模型。以下是如何使用nltk庫(kù)將一段文本的情感分類為正面、負(fù)面或中性的例子:
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
# 初始化情感分析器
sia = SentimentIntensityAnalyzer()
# 定義要分析的文本
text = "非常棒,小孩子很喜歡"
# 獲取情感分?jǐn)?shù)
sentiment_score = sia.polarity_scores(text)
# 打印情感得分
print (sentiment_score)
# 將情緒分類為正面、負(fù)面或中性
ifentiment_score [ 'compound' ] > 0.5 :
print ( "Positiveentiment" )
elif情感_score[ 'compound'] < - 0.5 :
print ( "Negative sentiment" )
else :
print ( "Neutral sentiment" )此例子使用了nltk.sentiment模塊中的SentimentIntensityAnalyzer類來(lái)分析文本 "我喜歡這個(gè)產(chǎn)品,它太棒了"的情緒。polarity_scores()方法返回一個(gè)包含文本情緒分?jǐn)?shù)的字典,其中'compound'分?jǐn)?shù)是一個(gè)介于-1和1之間的值,-1表示負(fù)面,1表示正面,0表示中性?;赾ompound分?jǐn)?shù),我們可以將情感分類為正面、負(fù)面或中性。
需要注意,這只是一個(gè)簡(jiǎn)單的例子,實(shí)際上,情感分析是一個(gè)需要大量調(diào)整和微調(diào)才能獲得良好結(jié)果的領(lǐng)域。一個(gè)預(yù)訓(xùn)練的模型可能無(wú)法很好地處理某些類型的文本(例如,諷刺),可能需要微調(diào)或預(yù)處理步驟來(lái)提高其性能。
二、命名實(shí)體識(shí)別 (NER)
命名實(shí)體識(shí)別(NER)是一種用于從非結(jié)構(gòu)化文本中提取實(shí)體,如人名、組織和地點(diǎn)的技術(shù)。執(zhí)行NER的一種方式是使用預(yù)訓(xùn)練模型,比如Python的spacy庫(kù)提供的模型。以下是如何使用spacy庫(kù)從一段文本中提取命名實(shí)體的例子:
import spacy
# Load the pre-trained model
nlp = spacy.load("en_core_web_sm")
# Define text to be analyzed
text = "Barack Obama visited the White House today"
# Process the text with the model
doc = nlp(text)
# Extract named entities
for ent in doc.ents:
print(ent.text, ent.label_)這個(gè)例子使用了spacy的en_core_web_sm模型來(lái)分析文本 Barack Obama visited the White House today。處理過(guò)的文本的ents屬性返回一個(gè)命名實(shí)體的迭代器,每個(gè)實(shí)體都有text和label_這兩個(gè)屬性,分別代表實(shí)體的文本和標(biāo)簽。在這個(gè)例子中,輸出將會(huì)是:
Barack Obama PERSON
White House FAC它顯示“Barack Obama”是一個(gè)人,而“White House”是一個(gè)設(shè)施。
在spacy中,有多個(gè)適用于不同語(yǔ)言的預(yù)訓(xùn)練模型,其中一些比其他模型更準(zhǔn)確。此外,命名實(shí)體識(shí)別是一個(gè)需要大量調(diào)整和微調(diào)才能取得良好結(jié)果的領(lǐng)域。一個(gè)預(yù)訓(xùn)練的模型可能無(wú)法很好地處理某些類型的文本(例如,技術(shù)性文本),可能需要額外的微調(diào)或預(yù)處理步驟來(lái)提高其性能。
三、文本分類
文本分類是一種將文本自動(dòng)分類到預(yù)定義的類別或類中的過(guò)程。例如,文本分類算法可能用于將電子郵件分類為垃圾郵件或非垃圾郵件,或者按主題對(duì)新聞文章進(jìn)行分類。文本分類在各種應(yīng)用中都有使用,包括自然語(yǔ)言處理、信息檢索和機(jī)器學(xué)習(xí)。
以下是使用Python庫(kù)scikit-learn進(jìn)行文本分類的一個(gè)例子。此例子使用了20個(gè)新聞組的數(shù)據(jù)集,其中包含來(lái)自20個(gè)不同新聞組的文本。目標(biāo)是訓(xùn)練一個(gè)分類器,根據(jù)內(nèi)容預(yù)測(cè)文本屬于哪個(gè)新聞組。
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
# Load the 20 Newsgroups dataset
newsgroups_train = fetch_20newsgroups(subset='train')
newsgroups_test = fetch_20newsgroups(subset='test')
# Transform the texts into TF-IDF vectors
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(newsgroups_train.data)
X_test = vectorizer.transform(newsgroups_test.data)
y_train = newsgroups_train.target
y_test = newsgroups_test.target
# Train a Multinomial Naive Bayes classifier
clf = MultinomialNB()
clf.fit(X_train, y_train)
# Predict the newsgroup of the test texts
y_pred = clf.predict(X_test)
# Evaluate the classifier's accuracy
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy * 100))這段代碼將加載20個(gè)新聞組的數(shù)據(jù)集,并將其劃分為訓(xùn)練集和測(cè)試集。然后,它會(huì)使用TfidfVectorizer將文本轉(zhuǎn)換為數(shù)值表示,并使用訓(xùn)練集訓(xùn)練一個(gè)多項(xiàng)式樸素貝葉斯分類器。最后,它會(huì)使用訓(xùn)練好的分類器預(yù)測(cè)測(cè)試文本的新聞組,并評(píng)估分類器的準(zhǔn)確性。
四、機(jī)器翻譯
機(jī)器翻譯是自動(dòng)將文本從一種語(yǔ)言翻譯成另一種語(yǔ)言的過(guò)程。例如,機(jī)器翻譯算法可能將一篇西班牙語(yǔ)的新聞文章翻譯成英語(yǔ)。機(jī)器翻譯在各種行業(yè)中都有使用,包括電子商務(wù)、國(guó)際商務(wù)和政府。
以下是一個(gè)使用OpenNMT庫(kù)將英文翻譯成法文的例子:
from opennmt import tokenizers
from opennmt import models
import torch
# Tokenize the source and target text.
source_tokenizer = tokenizers.new("text", "en")
source_text = "Hello, how are you?"
source_tokens = source_tokenizer.tokenize(source_text)
target_tokenizer = tokenizers.new("text", "fr")
target_text = "Bonjour, comment vas-tu?"
target_tokens = target_tokenizer.tokenize(target_text)
# Build the translation model.
model = models.Transformer(
source_vocab_size=len(source_tokenizer.vocab),
target_vocab_size=len(target_tokenizer.vocab),
num_layers=6,
hidden_size=512,
dropout=0.1,
attention_dropout=0.1,
relu_dropout=0.1)
model.eval()
# Convert the tokens to a tensor.
source_tokens = torch.tensor(source_tokenizer.encode(source_text)).unsqueeze(0)
# Generate a translation.
with torch.no_grad():
log_probs, _, _ = model(source_tokens, None, None)
tokens = log_probs.argmax(-1)
# Decode the translation.
translation = target_tokenizer.decode(tokens[0])
print(translation)這段代碼將輸出:“Bonjour, comment vas-tu?”(中文:你好,你好嗎?)
請(qǐng)注意,這是一個(gè)非常簡(jiǎn)單的例子,并不能直接運(yùn)行,因?yàn)樗枰虞d一個(gè)預(yù)訓(xùn)練的模型。此外,此例子使用的是小數(shù)據(jù)集作為輸入,而針對(duì)特定情況可能并沒(méi)有可用的預(yù)訓(xùn)練模型。如果想要了解更多關(guān)于機(jī)器學(xué)習(xí)的信息,請(qǐng)點(diǎn)擊這里。
五、文本摘要
文本摘要是自動(dòng)生成較長(zhǎng)文本縮減版的過(guò)程。例如,文本摘要算法可能會(huì)針對(duì)一篇長(zhǎng)篇新聞文章,生成一個(gè)簡(jiǎn)短的、概括主要要點(diǎn)的摘要。文本摘要在各種應(yīng)用中都有使用,包括自然語(yǔ)言處理、信息檢索和機(jī)器學(xué)習(xí)。
請(qǐng)注意,這是一個(gè)非常簡(jiǎn)單的例子,并不能直接運(yùn)行,因?yàn)樗枰虞d一個(gè)預(yù)訓(xùn)練的模型。此外,此例子使用的是小數(shù)據(jù)集作為輸入,而針對(duì)特定情況可能并沒(méi)有可用的預(yù)訓(xùn)練模型。
from gensim.summarization import summarize
text = "In computing, stop words are words which are filtered out before or after processing of text. Though stop words usually refer to the most common words in a language, there is no single universal list of stop words used by all natural language processing tools, and indeed not all tools even use such a list. Some tools specifically avoid removing these stop words to support phrase search."
print(summarize(text, ratio=0.2))這段代碼將輸出文本的摘要版,僅保留最重要的20%的句子:“Some tools specifically avoid removing these stop words to support phrase search.”(中文:有些工具特別避免刪除這些停用詞,以支持短語(yǔ)搜索。)
您可以調(diào)整比例參數(shù)來(lái)改變摘要的文本量,或者使用word_count參數(shù)來(lái)指定摘要中包含的詞數(shù)。
六、信息提取
信息提取是從非結(jié)構(gòu)化文本中提取結(jié)構(gòu)化數(shù)據(jù)的過(guò)程。例如,信息提取算法可能會(huì)從電商網(wǎng)站中提取產(chǎn)品信息,如價(jià)格和庫(kù)存情況。信息提取在各種行業(yè)中都有使用,包括電子商務(wù)、金融和醫(yī)療保健,以從非結(jié)構(gòu)化文本中提取結(jié)構(gòu)化數(shù)據(jù)。
以下是一個(gè)使用Python和Natural Language Toolkit(NLTK)庫(kù)進(jìn)行信息提取的例子:
import nltk
from nltk import word_tokenize, pos_tag, ne_chunk
# 示例文本
text = "Barack Obama 是美國(guó)第 44 任總統(tǒng),任期從 2009 年到 2017 年。"
# 對(duì)文本進(jìn)行分詞
tokens = word_tokenize(text)
# POS 標(biāo)記
tagged_tokens = pos_tag(tokens)
# 命名實(shí)體識(shí)別
Entity = ne_chunk(tagged_tokens)
print(entities)上述代碼首先將文本分詞成單個(gè)詞匯,然后進(jìn)行詞性標(biāo)注,識(shí)別每個(gè)詞的詞性,最后進(jìn)行命名實(shí)體識(shí)別,識(shí)別出人名、組織名和地名等實(shí)體。
ne_chunk函數(shù)的輸出是一個(gè)可以進(jìn)一步處理以提取感興趣實(shí)體的樹狀結(jié)構(gòu)。
(S
(PERSON Barack/NNP)
Obama/NNP
was/VBD
the/DT
44th/JJ
(ORGANIZATION President/NNP)
of/IN
the/DT
(GPE United/NNP States/NNPS)
,/,
serving/VBG
from/IN
2009/CD
to/TO
2017/CD
./.)請(qǐng)注意,上述例子非常簡(jiǎn)單,在現(xiàn)實(shí)中的應(yīng)用中,您需要做大量的預(yù)處理和模型微調(diào)。
七、文本生成
文本生成是自動(dòng)生成文本的過(guò)程,比如編寫產(chǎn)品描述或編寫新聞文章。例如,文本生成算法可能會(huì)將產(chǎn)品圖像作為輸入,然后生成產(chǎn)品描述。文本生成在各種行業(yè)中都有使用,包括電子商務(wù)、市場(chǎng)營(yíng)銷和內(nèi)容創(chuàng)作。
以下是一個(gè)使用Python庫(kù)Hugging Face的transformers中的GPT-2模型進(jìn)行文本生成的例子:
from transformers import GPT2Tokenizer, GPT2LMHeadModel
# Load the GPT-2 model and tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
# Define the prompt and generate text
prompt = "Once upon a time in a land far, far away"
generated_text = model.generate(input_ids=tokenizer.encode(prompt))
# Decode the generated text
generated_text = tokenizer.decode(generated_text)
print(generated_text)這段代碼將使用GPT-2模型根據(jù)提供的提示“Once upon a time in a land far, far away”(譯文:很久很久以前,在一個(gè)遙遠(yuǎn)的地方)生成文本。生成的文本將在控制臺(tái)上打印出來(lái)。
請(qǐng)注意,您可能需要互聯(lián)網(wǎng)連接來(lái)下載預(yù)訓(xùn)練模型,同時(shí)也需要強(qiáng)大的GPU來(lái)生成文本。
八、文本聚類
文本聚類是將相似的文本文檔分組的過(guò)程。例如,文本聚類算法可能會(huì)對(duì)新聞文章集合進(jìn)行處理,并將其分為“體育”、“政治”和“娛樂(lè)”等類別。文本聚類在各種應(yīng)用中都有使用,包括自然語(yǔ)言處理、信息檢索和機(jī)器學(xué)習(xí)。
import nltk
from nltk import word_tokenize, pos_tag, ne_chunk
# Sample text
text = "Barack Obama was the 44th President of the United States, serving from 2009 to 2017."
# Tokenize the text
tokens = word_tokenize(text)
# POS tagging
tagged_tokens = pos_tag(tokens)
# Named entity recognition
entities = ne_chunk(tagged_tokens)
print(entities)上述代碼首先將文本分詞成單個(gè)詞匯,然后進(jìn)行詞性標(biāo)注,識(shí)別每個(gè)詞的詞性,最后進(jìn)行命名實(shí)體識(shí)別,識(shí)別出人名、組織名和地名等實(shí)體。
ne_chunk函數(shù)的輸出是一個(gè)可以進(jìn)一步處理以提取感興趣實(shí)體的樹狀結(jié)構(gòu)。
九、語(yǔ)音識(shí)別
語(yǔ)音識(shí)別是將口語(yǔ)轉(zhuǎn)化為書面文字的過(guò)程。例如,語(yǔ)音識(shí)別算法可能會(huì)在語(yǔ)音控制系統(tǒng)中使用,如虛擬助手,將口頭指令轉(zhuǎn)錄為計(jì)算機(jī)可以理解的文字。語(yǔ)音識(shí)別在各種行業(yè)中都有使用,包括醫(yī)療保健、金融和客戶服務(wù)。
有許多庫(kù)和框架可以用于各種編程語(yǔ)言的語(yǔ)音識(shí)別。以下是如何使用Python中的Speech Recognition庫(kù)從麥克風(fēng)轉(zhuǎn)錄語(yǔ)音的例子:
import speech_recognition as sr
# create a recognizer object
r = sr.Recognizer()
# create a microphone object
mic = sr.Microphone()
# listen for speech and transcribe it
with mic as source:
r.adjust_for_ambient_noise(source)
audio = r.listen(source)
transcribed_text = r.recognize_google(audio)
print(transcribed_text)這個(gè)例子使用了recognize_google()函數(shù),該函數(shù)利用Google Web語(yǔ)音API進(jìn)行語(yǔ)音轉(zhuǎn)錄。其他的轉(zhuǎn)錄選項(xiàng)包括使用recognize_sphinx()函數(shù)(它使用CMU Sphinx引擎)或recognize_wit()函數(shù)(它使用Wit.ai API)。
你也可以使用這個(gè)庫(kù)來(lái)識(shí)別文件中的語(yǔ)音:
with sr.AudioFile('audio_file.wav') as source:
audio = r.record(source)
transcribed_text = r.recognize_google(audio)
print(transcribed_text)請(qǐng)注意,使用Google Web語(yǔ)音API需要網(wǎng)絡(luò)連接,而且你可能需要設(shè)置憑證并根據(jù)你選擇的轉(zhuǎn)錄引擎安裝一些額外的包。
十、文本轉(zhuǎn)語(yǔ)音 (TTS)
文本到語(yǔ)音(TTS)是一種將書面文本轉(zhuǎn)化為口語(yǔ)的技術(shù)。它常用于為視覺(jué)障礙者進(jìn)行語(yǔ)音合成、語(yǔ)音助手以及自動(dòng)客戶服務(wù)系統(tǒng)等應(yīng)用。
TTS系統(tǒng)使用多種技術(shù)的組合,如自然語(yǔ)言處理和機(jī)器學(xué)習(xí),來(lái)產(chǎn)生逼真的語(yǔ)音。一些TTS軟件的例子包括Google的文本到語(yǔ)音、Amazon Polly以及Apple的Siri。
以下是一個(gè)使用Python中的gTTS(Google文本到語(yǔ)音)庫(kù)來(lái)將文本轉(zhuǎn)化為語(yǔ)音的例子:
from gtts import gTTS
import os
text = "Hello, this is an example of text to speech using the gTTS library in Python."
# Language in which you want to convert
language = 'en'
# Passing the text and language to the engine,
# here we have marked slow=False. Which tells
# the module that the converted audio should
# have a high speed
myobj = gTTS(text=text, lang=language, slow=False)
# Saving the converted audio in a mp3 file named
# welcome
myobj.save("welcome.mp3")
# Playing the converted file
os.system("mpg321 welcome.mp3")這段代碼使用gTTS庫(kù)將文本“Hello, this is an example of text to speech using the gTTS library in Python.”(譯文:“你好,這是一個(gè)使用Python中的gTTS庫(kù)將文本轉(zhuǎn)化為語(yǔ)音的例子。”)轉(zhuǎn)化為語(yǔ)音,并將其保存到一個(gè)名為“welcome.mp3”的mp3文件中。
最后一行os.system(“mpg321 welcome.mp3”)使用命令行工具mpg321播放mp3文件。如果你的系統(tǒng)中沒(méi)有安裝mpg321,你可以使用其他播放器來(lái)播放mp3文件。
關(guān)于高級(jí)自然語(yǔ)言處理的進(jìn)一步學(xué)習(xí),可以參考這個(gè)鏈接:
microstone123/Natural-Language-processing (github.com)。






















