天天看點

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

随着資訊化的發展,很多具有重要價值的知識隐藏分布在海量資料中,影響了人們擷取知識的效率,如何處理繁雜的非結構化文本資料成為難題。

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

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

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

問答系統

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

資訊索引

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

知識圖譜建構

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

目前,華為機器學習服務線上文本實體抽取能力共支援人名、金錢、影視名、網頁連結在内的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();
}      

了解更多詳情>>

通路​​華為開發者聯盟官網​​

繼續閱讀