線上文字實體抽取能力,助力應用解析海量文字資料

HMSCore發表於2022-06-23

隨著資訊化的發展,很多具有重要價值的知識隱藏分佈在海量資料中,影響了人們獲取知識的效率,如何處理繁雜的非結構化文字資料成為難題。

近日,HMS Core機器學習服務6.5.0版本新增線上文字實體抽取能力,該能力可以檢測出文字中是否存在比如日期、姓名、專有名詞等實體資訊,並將此類實體抽取出來,即自動處理非結構化自然語言文字資料的能力。例如,影視行業的應用中常常會出現大量文字的影評、資訊等內容,使用線上文字實體抽取能力即可快速提取結構資訊,幫助搭建知識圖譜,便於使用者清晰理解。

此外,文字實體抽取能力更多應用於問答系統、資訊索引、知識圖譜構建等領域。

問答系統

問答系統是資訊檢索系統的一種高階形式,它能用準確、簡潔的自然語言回答使用者提出的問題。在問答系統實現過程中,則需要用到文字實體抽取能力識別問題和知識庫中的實體資訊,再通過多種演算法模型匹配出精準回答。

資訊索引

使用線上文字實體抽取能力,可命名特定實體資訊作為索引和超連結。比如使用者在評論時提到的專有名詞,可以生成超連結,便於其他使用者檢索瞭解相關內容。

知識圖譜構建

知識圖譜是由實體、關係和屬性組成的一種資料結構,即具有有向圖結構的一個知識庫,文字實體抽取能力作為知識圖譜構建過程中的底層能力,有著極其重要的作用。比如構建音樂知識圖譜,首先需要大量的文字資料中提取出歌手、歌曲、作詞、影視等相關資訊,然後再進行知識圖譜的搭建。

目前,華為機器學習服務線上文字實體抽取能力共支援人名、金錢、影視名、網頁連結在內的16個實體類別,可根據實際語義場景應用於不同類別的App中。

整合步驟

  1. 開發準備

詳細準備步驟可參考華為開發者聯盟官網

  1. 整合和配置apigateway鑑權

基於apigateway的鑑權機制:

"paths": {
"/entityExtract": { "post": { "operationId": "entityExtract",
"parameters": [{"in": "body",  "name": "req",  "required": true,
"schema": { "$ref": "#/definitions/NerEnterReq"  } },  {
"name": "X-Request-ID", "in": "header",  "required": true,
"type": "string"
}, {"name": "X-Package-Name",  "in": "header", "required": true,
"type": "string"  }, ……],
 "responses": {"200": {   "description": "response of 200",
"schema": { "$ref": "#/definitions/ResponseEntityNerBodyVo"}}}}}
  1. 建立線上文字實體構造器
// 使用自定義的引數配置建立語種檢測器。
 MLRemoteNerSetting setting = new MLRemoteNerSetting.Factory()
                .setSourceLangCode("zh")
                .create();
MLRemoteNer ner = MLNerFactory.getInstance().getRemoteNer(setting);
進行文字實體抽取。
  1. 線上獲取文字實體抽取

非同步方法示例程式碼:

ner.asyncEntityExtract(input).addOnSuccessListener(new OnSuccessListener<RemoteNerResultItem[]>() {
            @Override
            public void onSuccess(RemoteNerResultItem[] remoteNerResults) {
                // 成功的處理邏輯。
                if(remoteNerResults != null){
                    // 有識別結果
                }else {
                    //  識別結果為空
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                // 識別失敗,獲取相關異常資訊。
                try {
                    MLException mlException = (MLException) e;
                    // 獲取錯誤碼,開發者可以對錯誤碼進行處理,根據錯誤碼進行差異化的頁面提示。
                    int errorCode = mlException.getErrCode();
                    // 獲取報錯資訊,開發者可以結合錯誤碼,快速定位問題。
                    String errorMessage = mlException.getMessage();
                } catch (Exception error) {
                    // 轉換錯誤處理。
                }
            }
        });

同步方法示例程式碼:

try {
       RemoteNerResultItem[] remoteNerResults = ner.syncEntityExtract(input);
       // 識別成功邏輯
       if(remoteNerResults != null){
       // 有識別結果
       }else {
       //  識別結果為空
        }
   } catch (MLException mlException) {
       // 失敗的處理邏輯。
       // 獲取錯誤碼,開發者可以對錯誤碼進行處理,根據錯誤碼進行差異化的頁面提示。
       int errorCode = mlException.getErrCode();
       // 獲取報錯資訊,開發者可以結合錯誤碼,快速定位問題。
       String errorMessage = mlException.getMessage();
   }
  1. 完成後,釋放資源
if (ner != null) {
    ner.stop();
}

瞭解更多詳情>>

訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHubGitee

關注我們,第一時間瞭解 HMS Core 最新技術資訊~

相關文章