日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无符号数的算术四则运算中的各类单词的识别_文本反垃圾在花椒直播中的应用概述...

發布時間:2024/1/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无符号数的算术四则运算中的各类单词的识别_文本反垃圾在花椒直播中的应用概述... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

奇技指南

本文主要以文本為對象,簡要地介紹花椒平臺在文本反垃圾方面所采用的文本垃圾攔截技術

本文轉載自花椒技術公眾號

背景

隨著花椒用戶和主播用戶的數量不斷增加,一些非法用戶(垃圾蟲)利用花椒平臺數據流量大、信息傳播范圍廣的優勢,通過各種多媒體手段(文本、圖片、語音、短視頻等)在用戶個人資料信息(昵稱,簽名,頭像等)及直播間聊天等場景散播垃圾信息,這些信息嚴重影響了用戶的觀看體驗,甚至會導致用戶流失、活躍度下降,此外一些情節嚴重的違法違規內容會給平臺帶來運營風險和負面的社會影響。

問題分析

本文主要以文本為對象,簡要地介紹花椒平臺在文本反垃圾方面所采用的文本垃圾攔截技術。目前平臺上所接觸到的文本垃圾信息基本上可以概括為以下幾個類別:

  • 垃圾廣告:各類商品廣告、詐騙廣告等

  • 色情內容:色情詞匯、色情服務及低俗信息等

  • 暴恐、政治敏感詞: 暴恐涉政、違禁品等

  • 竟品信息及其他信息等

  • 對于平臺初期數據量較少、垃圾信息形式單一的情況,采用人工審核的方式基本可以解決問題。但是隨著平臺業務的拓寬與發展,業務量迅速增加,僅依靠人工審核方式無法應對,這時需要借助一些規則策略和算法模型輔助人工審核,以減少人工審核工作量,提高審核效率。

    簡單的垃圾信息,可以通過設置規則進行關鍵詞過濾和屏蔽,正則表達則可以發揮很大作用。但是發布者為了逃避攔截,通常都會對垃圾信息進行改造和偽裝,比如拼音替換,同義詞替換,象形字替換,嵌入表情字符,用表情代替字符,甚至是將文字順序打亂。對于復雜的信息,其表達形式廣泛、沒有規律,僅僅通過規則過濾達不到效果,可借助精準的算法模型進行檢測。

    垃圾信息攔截是一個常見的文本二分類任務,是自然語言處理領域的一個基本任務,目的是推斷出給定的文本的標簽。二分類問題常見的評價指標有準確率(accuracy),精準率(precision),召回率(recall),F1-score等。

    文本分類算法介紹

    傳統文本分類方法

    一般來講傳統機器學習文本分類任務過程包括文本預處理、特征提取、文本表示、訓練分類器和分類性能評估。其中構建特征工程和分類建模方法是文本分類任務中最重要的兩個環節。文本的預處理包括文本分詞、去除停用詞(包括標點、數字和一些無意義的詞)、詞義消歧、統計等處理。中文與英文相比,在中文文本預處理過程中,首先要進行分詞處理,而英文文本單詞與單詞之間通過空格即可分割,無需進行分詞處理。特征提取和文本表示目的就是將文本轉化為計算機可以理解的向量形式。詞袋模型(Bag of Words)是用于文本表示的最簡單的方法, BoW把文本轉換為文檔中單詞出現次數的矩陣,只關注文檔中是否出現給定的單詞和單詞出現頻率,而舍棄文本的結構、單詞出現的順序和位置。詞頻-逆向文件頻率(TF-IDF)是一種在文本挖掘中廣泛使用的特征向量化方法,主要衡量一個文檔中詞語在語料庫中的重要程度。Word2vec采用一系列代表文檔的詞語來訓練word2vec權重矩陣,將每個詞語映射到一個固定大小的向量。

    分類器用的比較多的是LR,SVM,MLP,GBDT等,當然還有其他一些分類算法,這里不多贅述。

    基于CNN的文本分類方法

    隨著互聯網的普及,一些用戶為求彰顯個性,開始大量使用同音字、音近字、特殊符號等異形文字(火星文)。由于這種文字與日常使用的文字相比有明顯的不同并且文法也相當奇異,目前平臺上遇到的難以識別樣本大多是數字、QQ、微信的變種、多是象形字符,不含語義、分詞模型對這些符號無法處理而且文本都很簡短。

    Badcase樣本示例

    傳統文本分類方法所存在的問題

  • 這些文字如果使用常規的分詞方法會導致分詞失敗

  • 即使能成功分詞,也很難查找到大規模語料庫對詞語進行向量表示

  • 過濾異種符號和文字,導致抓不住火星文特征

  • 因此需要一種不借助分詞的模型,以單個字詞為原子進行詞向量表示,并且可以挖掘學習詞與詞之間的語序及語義信息。

    因此需要一種不借助分詞的模型,以單個字詞為原子進行詞向量表示,并且可以挖掘學習詞與詞之間的語序及語義信息。

    TextCNN 原理

    CNN(Convolutional Neural Network)卷積神經網絡在圖像處理方面應用很多,TextCNN模型創新性的將CNN結構應用在了NLP領域,為文本分類提供了新的思路,TextCNN解決了傳統方法分詞處理和詞向量表示兩個關鍵問題,其貢獻主要有以下幾點:?

  • 避免分詞,以字符為單位的文本向量表示

  • CNN能捕捉局部區域的詞序及語義信息,所表達的特征更加豐富

  • 采用不同尺寸的卷積核,可以提取到 n-gram 的特征

  • 卷積結構運算速度快,模型響應時長控制在 50ms 以下

  • 模型結構

    TextCNN 模型采用交叉熵損失函數,即將文本處理建模為一個二分類問題。該模型先將文本進行詞嵌入(Embedding)獲得詞向量,然后采用不同尺寸卷積核進行卷積運算提取特征,接著進行最大池化(Max pooling)得到顯著特征,最后接一個概率輸出層(Softmax)進行文本分類。

    卷積部分

    對于一維的文本數據,經過詞向量化操作后可以得到類似于圖像的二維向量。假設輸入的每個詞的向量維度為k,即詞向量空間維度為k,則包含n個單詞的句子組成一個 n×k 的二維矩陣,假設卷積核為h×k,h則是卷積滑動窗口的大小,卷積特征

    注意到卷積核的寬度k與詞向量的維度一致,是因為輸入的每一行向量代表一個詞,即在抽取特征的過程中,將詞作為文本的最小粒度

    例如有一個樣本 T={"我","愛","花","椒","直","播"},樣本輸入長度為N= 6,詞向量空間維度為 k=5,假設滑動窗口尺寸h=4,則卷積核尺寸為4×5。

    輸入數據

    卷積核

    假設滑動窗口移動步長為1,上述輸入數據經過卷積運算后將得到如下長度為n-h+1=3的向量輸出結果

    同理,假設采用2,3,4三種尺寸卷積核,每種尺寸對應有m個卷積核,這樣經過卷積運算后,每個尺寸的卷積核對應有的卷積特征。

    池化層

    最大池化即對領域內特征點取最大值,通常情況下max-pooling能減小卷積層參數誤差造成估計均值的偏移,更多的保留顯著特征信息,最大池化的定義及示例如下:

    對于上述卷積操作得到的3m個(n?h+1)×1的卷積特征采用尺寸為(n?h+1)×1的最大池化(max_pooling)操作得到3個m×1維的特征,最后這些特征進行拼接,得到3m×1維的向量。當用CNN提取出特征向量后,就可以將其輸入到概率輸出層(softmax)進行分類,其中softmax函數定義如下:

    以下是TextCNN模型代碼實現:

    #coding:utf-8import tensorflow as tfimport numpy as npclass TextCNN(object): def __init__(self, sequence_length, num_classes, vocab_size, embedding_size, filter_sizes, num_filters, l2_reg_lambda=0.0): self.input_x = tf.placeholder(tf.int32, [None, sequence_length], name="input_x") self.input_y = tf.placeholder(tf.float32, [None, num_classes], name="input_y") self.dropout_keep_prob = tf.placeholder(tf.float32, name="dropout_keep_prob") l2_loss = tf.constant(0.0) #Embedding with tf.device('/cpu:0'), tf.name_scope("embedding"): self.W = tf.get_variable('lookup_table', dtype=tf.float32, shape=[vocab_size, embedding_size], initializer=tf.random_uniform_initializer()) self.W = tf.concat((tf.zeros(shape=[1, embedding_size]), self.W[1:, :]), 0) self.embedded_chars = tf.nn.embedding_lookup(self.W, self.input_x) self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1) #Convolution pooled_outputs = [] for i, filter_size in enumerate(filter_sizes): with tf.name_scope("conv-maxpool-%s" % filter_size): filter_shape = [filter_size, embedding_size, 1, num_filters] W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W") b = tf.Variable(tf.constant(0.1,shape=[num_filters]), name="b") conv = tf.nn.conv2d(self.embedded_chars_expanded,W,strides=[1, 1, 1, 1], padding="VALID",name="conv") h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu") pooled = tf.nn.max_pool(h,ksize=[1, sequence_length - filter_size + 1, 1, 1], strides=[1, 1, 1, 1],padding='VALID',name="pool") pooled_outputs.append(pooled) num_filters_total = num_filters * len(filter_sizes) self.h_pool = tf.concat(pooled_outputs, 3) self.h_pool_flat = tf.reshape(self.h_pool, [-1, num_filters_total]) with tf.name_scope("dropout"): self.h_drop = tf.nn.dropout(self.h_pool_flat, self.dropout_keep_prob) #Output with tf.name_scope("output"): W = tf.get_variable("W",shape=[num_filters_total, num_classes], initializer=tf.contrib.layers.xavier_initializer()) b = tf.Variable(tf.constant(0.1, shape=[num_classes]), name="b") l2_loss += tf.nn.l2_loss(W) l2_loss += tf.nn.l2_loss(b) self.scores = tf.nn.xw_plus_b(self.h_drop, W, b, name="scores") self.predictions = tf.argmax(self.scores, 1, name="predictions") #Loss with tf.name_scope("loss"): losses = tf.nn.softmax_cross_entropy_with_logits(logits=self.scores, labels=self.input_y) self.loss = tf.reduce_mean(losses) + l2_reg_lambda * l2_loss #Accuracy with tf.name_scope("accuracy"): correct_predictions = tf.equal(self.predictions, tf.argmax(self.input_y, 1)) self.accuracy = tf.reduce_mean(tf.cast(correct_predictions, "float"), name="accuracy")

    訓練結果

    小結

    本節簡要地介紹了傳統方法在文本分類方法任務中的基本流程以及存在的問題,并且闡述了深度學習方法在文本分類任務中優勢,以及TextCNN以單個字符為單位,采用卷積提取局部特征,對于處理類似火星文的文本更加魯棒。此外之所以選用CNN而沒有選用像word2vec以及沒有提到的RNN等深度學習方法,是因為CNN相對于word2vec能獲得更好的局部的語序信息及語義信息;相比于RNN而言,CNN 是分層架構,CNN更適合提取關鍵特征,對于分類問題效果更好,而RNN是連續結構,更適合順序建模,此外CNN適合并行計算,還可以采用GPU加速計算,響應時間短,inference只有3ms,非常適合垃圾文本檢測速度的要求。

    文本反垃圾模型線上部署流程

    服務架構

    反垃圾服務分為線上與線下兩層。線上實時服務要求毫秒級判斷文本是否屬于垃圾文本,線下離線計算需要根據新進的樣本不斷更新模型,并及時推送到線上。垃圾文本識別是一個長期攻防的過程,平臺上的垃圾文本會不斷演變,模型的效果也會隨之變化。

    Tensorflow serving模型部署

    TensorFlow Serving是一個靈活、高性能的機器學習模型服務系統,專為生產環境而設計。使用TensorFlow Serving可以將訓練好的機器學習模型輕松部署到線上,并且支持熱更新。它使用gRPC作為接口接受外部調用,服務穩定,接口簡單。能檢測模型最新版本并自動加載。這意味著一旦部署 TensorFlow Serving 后,不需要為線上服務操心,只需要關心線下模型訓練。

    客戶端調用

    TensorFlow Serving通過gRPC服務接受外部調用。gRPC是一個高性能、通用的開源RPC框架, gRPC提供了一種簡單的方法來精確地定義服務和自動為客戶端生成可靠性很強的功能庫。

    在使用gRPC進行通信之前,需要完成兩步操作:

  • 定義服務
  • 生成服務端和客戶端代碼

  • 定義服務這塊工作TensorFlow Serving已經幫我們完成了。TensorFlow Serving項目中model.proto、predict.proto和prediction_service.proto這個三個.proto文件定義了一次預測請求的輸入和輸出

    接下來用寫好的客戶端程序來調用部署好的模型,啟動服務后,訪問下面地址可以查看識別結果,說明模型部署成功且可以正常使用。

    參考資料

  • Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.

  • http://web.stanford.edu/class/cs224n/slides/cs224n-2019-lecture11-convnets.pdf

  • https://www.cnblogs.com/ljhdo/p/10578047.html

  • https://tensorflow.google.cn/tfx/serving/architecture

  • https://baike.baidu.com/item/火星文/608814

  • 關注我們

    界世的你當不

    只做你的肩膀

    ?360官方技術公眾號?

    技術干貨|一手資訊|精彩活動

    空·

    總結

    以上是生活随笔為你收集整理的无符号数的算术四则运算中的各类单词的识别_文本反垃圾在花椒直播中的应用概述...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。