Java 中的 NLP 庫概述
一、概述
自然語言處理 (NLP) 是人工智能 (AI) 的一個分支,它使計算機能夠像人類一樣理解書面或口頭語言。在這個人工智能革命的時代,它有多種應用。
在本教程中,我們將探索 Java 中的不同 NLP 庫,並了解如何使用 Apache OpenNLP 和 Stanford CoreNLP 實現一些 NLP 任務。
2. 什麼是自然語言處理?
NLP 使計算機能夠以與人類類似的方式處理文本和單詞。它將計算語言學與統計學、深度學習和機器學習相結合。
人們每天通過各種媒體在線互動。在這樣做的過程中,他們共享不同類型的數據,例如文本、語音、圖像等。這些數據對於理解人類行為和習慣至關重要。因此,它們被用來訓練計算機模仿人類智能。
NLP 使用數據訓練機器模仿人類語言行為。為此,它遵循一個由幾個步驟組成的過程:
- 它將文本分割成更小的單元,例如句子或單詞。
- 它標記文本,這意味著它為每個單詞分配一個唯一的標識符。
- 它刪除了停用詞,這些詞是不會給文本增加太多意義的常見詞,例如“the”、“a”、“and”等。
- 它對文本進行詞乾化或詞形還原,這意味著它將每個單詞簡化為其詞根形式或字典形式。
- 它用詞性標記每個詞。
- 它用命名實體標記每個詞,例如人物、位置、組織等。
3. NLP的用例
NLP 是眾多現代現實世界應用程序中機器智能背後的驅動力。
機器翻譯是一個示例用例。我們擁有可以將一種特定語言翻譯成另一種語言的系統。一個這樣的例子是谷歌翻譯。驅動機器翻譯的技術基於 NLP 算法。
此外,另一個流行的用例是垃圾郵件檢測。大多數流行的電子郵件服務提供商使用垃圾郵件檢測器來確定收到的郵件是否為垃圾郵件。垃圾郵件檢測應用 NLP 文本分類技術,根據語言模式識別垃圾郵件。
此外,人工智能聊天機器人現在非常普遍。流行的示例包括 Siri、Google Assistant、Alexa 等。這些應用程序使用語音識別和自然語言來識別語音模式並以適當的、有用的評論進行響應。
NLP 是這些應用程序的核心邏輯,因為它使它們能夠處理自然語言的輸入和輸出,例如文本和語音,並理解它們背後的含義和意圖。
4. 開放自然語言處理
Apache OpenNLP是一個利用機器學習來處理自然語言文本的工具包。它為常見的 NLP 任務提供支持,如標記化、分割、語音標記等。
Apache OpenNLP 的主要目標是為 NLP 任務提供支持,並為不同的語言提供大量的預構建模型。此外,它還提供了一個命令行界面 (CLI),便於進行實驗和培訓。
可以從 Apache OpenNLP下載各種預構建模型。讓我們使用預先構建的模型來實現一個簡單的語言檢測器。首先,讓我們將 OpenNLP依賴項添加到pom.xml
中:
<dependency>
<groupId>org.apache.opennlp</groupId>
<artifactId>opennlp-tools</artifactId>
<version>2.1.1</version>
</dependency>
接下來,讓我們使用langdetect-183.bin
預構建模型來實現語言檢測器:
@Test
void givenTextInEnglish_whenDetectLanguage_thenReturnsEnglishLanguageCode() {
String text = "the dream my father told me";
LanguageDetectorModel model;
try (InputStream modelIn = new FileInputStream("langdetect-183.bin")) {
model = new LanguageDetectorModel(modelIn);
} catch (IOException e) {
return;
}
LanguageDetectorME detector = new LanguageDetectorME(model);
Language language = detector.predictLanguage(text);
assertEquals("eng", language.getLang());
}
在上面的示例中,我們從 OpenNLP 中獲取用於檢測語言的預構建模型並將其放在根目錄中。然後,我們定義輸入數據。接下來,我們加載語言檢測器模型。最後,我們創建一個新的LanguageDetectorME
實例並嘗試檢測語言。我們用返回語言測試預期的語言。
5. 斯坦福自然語言處理
斯坦福 NLP小組幫助開發允許機器處理、生成和理解人類文本和語言的算法。
CoreNLP 是斯坦福 NLP 小組用 Java 編寫的一套程序,可以執行各種 NLP 任務,如標記化、詞性標註、詞形還原等。它可以通過命令行、Java 代碼或調用服務器來使用。
讓我們看一個使用 Stanford CoreNLP 執行標記化的示例。我們需要將它的依賴添加到pom.xml
中:
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>4.5.3</version>
</dependency>
接下來,讓我們執行標記化:
@Test
void givenSampleText_whenTokenize_thenExpectedTokensReturned() {
Properties props = new Properties();
props.setProperty("annotators", "tokenize");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
String text = "The german shepard display an act of kindness";
Annotation document = new Annotation(text);
pipeline.annotate(document);
List<CoreMap> sentences = document.get(CoreAnnotations.SentencesAnnotation.class);
StringBuilder tokens = new StringBuilder();
for (CoreMap sentence : sentences) {
for (CoreLabel token : sentence.get(CoreAnnotations.TokensAnnotation.class)) {
String word = token.get(CoreAnnotations.TextAnnotation.class);
tokens.append(word).append(" ");
}
}
assertEquals("The german shepard display an act of kindness", tokens.toString().trim());
}
在上面的示例中,我們設置了帶有標記化註釋器的StanfordCoreNLP
對象。接下來,我們創建一個新的Annotation
實例。最後,我們實現了從樣本句子生成標記的邏輯。
6.CogComp 自然語言處理
CogComp NLP是由認知計算組開發的自然語言處理 (NLP) 庫的集合。它為 NLP 任務提供了各種工具和模塊,例如標記化、詞形還原、詞性標註等。
CogComp NLP 可以用作命令行工具或 Java API。 CogComp NLP 中流行的模塊之一是cogcomp-nlp-pipeline
,它對給定的文本執行基本的 NLP 任務。但是, cogcomp-nlp-pipeline
僅適用於英文純文本。
另一個模塊是similarity
,它衡量文本或其他對象之間的相似性並返回一個分數。
7. 大門
文本工程通用架構 (GATE)是一個能夠解決文本分析和語言處理問題的工具包。它是開發處理人類語言的軟件組件的絕佳基礎設施。此外,它還是 NLP 的絕佳工具包。
該工具包擁有龐大的開發人員和研究人員社區,他們將其用於信息提取、情感分析、社交媒體挖掘和生物醫學文本處理。
GATE 通過為語言處理軟件提供架構來幫助開發人員和研究人員。此外,它還提供了一個實現架構的類庫。
8.阿帕奇UIMA
非結構化信息管理應用程序 (UIMA)是可以處理和分析大量非結構化數據(包括文本、音頻和視頻)的軟件系統。它們有助於創建可以從內容中檢測情緒、實體和其他類型信息的組件。這些組件是用 Java 或 C++ 編寫的。
此外,Apache UIMA 是一個框架,使我們能夠使用 UIMA 組件構建應用程序並處理大量非結構化數據。它幫助我們從數據中提取相關信息並將其用於各種目的。
9.木槌
Machine Learning for LangaugE Toolkit (MALLET)是一個 Java 包,它為 NLP 任務提供各種工具和算法,例如文檔分類、主題建模和序列標記。 MALLET 中包含的算法之一是樸素貝葉斯算法,該算法在 NLP 中廣泛用於文本分類和情感分析。
MALLET 是一個開源 Java 包,它提供了各種文本分析工具。這些工具之一是主題建模,它可以在大量未標記的文本文檔中發現主要主題。
此外,MALLET 還可以將文本文檔轉換為可用於機器學習的數值向量。此外,它可以用作命令行工具或直接用作 Java API。
10.結論
在本文中,我們了解了有關 NLP 的關鍵知識以及 NLP 的用例。此外,我們還看到了不同的 Java NLP 庫和工具包。此外,我們還分別查看了使用 CoreNLP 和 OpenNLP 進行標記化和句子檢測的示例。
與往常一樣,示例的完整源代碼可在 GitHub 上獲得。