怎么開發pos機,我想構建一個能夠與開發人員產生共鳴的機器學習模型

 新聞資訊  |   2023-03-28 08:27  |  投稿人:pos機之家

網上有很多關于怎么開發pos機,我想構建一個能夠與開發人員產生共鳴的機器學習模型的知識,也有很多人為大家解答關于怎么開發pos機的問題,今天pos機之家(www.tonybus.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、怎么開發pos機

2、怎么申請pos機,要有什么條件?

3、pos機業務怎么跑?

怎么開發pos機

點擊上方關注,All in AI中國

嗨,我是Sara Robinson,Google Cloud的開發者倡導者。我最近在Google Next 2019上與我的隊友Yufeng討論了構建模型來預測Stack Overflow的問題標簽。下面是演示的工作原理:

我們想要 ,因此Stack Overflow非常適合。為了訓練高精度模型,我們需要大量的Stack Overflow數據。幸運的是,BigQuery中存在這樣的數據集。此數據集包括定期更新的26 GB Stack Overflow問題表(您可以在此處瀏覽BigQuery中的數據集)。

在這篇文章中,我將介紹構建模型,了解模型如何使用SHAP進行預測,以及將模型部署到Cloud AI Platform。在這個例子中,我將向您展示如何構建模型來預測Stack Overflow中的問題標簽。為了簡單起見,我們的數據集包含了5個可能的ML相關標簽的問題:

BigQuery有一個很棒的公共數據集,其中包含超過1700萬個Stack Overflow問題。我們將使用它來獲取我們的訓練數據。為了使這個模型成為一個更難的問題,我們用鱷梨替換了數據集中的贈品詞的每個實例(如tensorflow、tf、pandas、pd等)。否則我們的模型可能會使用“tensorflow”這個詞來預測一個問題被標記為TensorFlow,這不是一個非常有趣的問題。由此產生的數據集有很多像下面這樣的:

您可以在此處以CSV格式訪問預處理的鱷梨填充數據集?!告溄印?/p>

什么是詞袋模型?

當你開始剝去機器學習模型的層時,你會發現它只是一堆矩陣乘法。無論模型的輸入數據是圖像、文本、分類還是數字,它們都將轉換為矩陣。如果你還記得代數類中的y = mx + b,這看起來很熟悉:

對于像圖像和文本這樣的非結構化數據來說,這似乎并不直觀,但事實證明,任何類型的數據都可以表示為矩陣,因此我們的模型可以理解它。單詞包是將自由格式文本輸入轉換為矩陣的一種方法。在開始使用自定義文本模型時,我最喜歡使用它,因為它解釋相對簡單。想象一下您的模型的每個輸入都是一袋拼字方塊,其中每個方塊都是輸入句子中的單詞而不是字母。由于它是單詞的“包”,這種方法無法理解單詞在句子中的順序,但它可以檢測某些單詞的存在與否。要實現這一功能,您需要選擇一個詞匯表,其中包含整個文本語料庫中前N個最常用的單詞。這個詞匯表將是您的模型可以理解的唯一單詞。讓我們從Stack Overflow數據集中獲取一個超簡化示例。我們只預測3個標簽(Pandas、keras和matplotlib),我們的詞匯量大小為10。想象一下,如果你正在學習一門新語言,你只知道這10個單詞:

數據幀層系列圖形列情節顏色軸read_csv激活

現在讓我們假設有以下輸入問題:

如何繪制數據框條形圖的輸入將成為一個詞匯大小的數組(在本例中為10),表明特定問題是否包含我們詞匯表中的每個單詞。上面的問題包含我們詞匯中的3個單詞:plot、dataframe和graph。由于其他單詞不在我們的詞匯表中,我們的模型將不知道它們的含義。現在我們開始將這個問題轉換成一個多字的單詞矩陣。我們最終將得到一個10元素的1和0數組,表示每個輸入示例中存在特定單詞的索引。由于我們的問題包含單詞dataframe,這是我們詞匯表中的第一個單詞,所以詞匯表數組的第一個單元將包含1。我們在詞匯表數組的第4和第6位也會有一個1,表示這個句子中出現了情節和圖表。

以下是我們最終得到的結果:

[ 1 0 0 1 0 1 0 0 0 0 ]

即使情節出現在我們句子中的數據幀之前,我們的模型也會忽略這一點,并對每個輸入使用我們的詞匯表矩陣。這個問題被標記為pandas和matplotlib,因此輸出向量將為[1 0 1]。這是一個將所有內容組合在一起的可視化:

使用Keras將文本轉換為單詞包

從我們的文本中取出前N個單詞,并將每個輸入轉換為N大小的詞匯矩陣聽起來像是需要完成很多工作。幸運的是Keras有一個實用功能,所以我們不需要手工完成。我們可以在筆記本中完成所有這些工作(即將推出完整的筆記本電腦代碼?。J紫?,我們將CSV下載到我們的筆記本中,并從數據中創建一個Pandas DataFrame:

# Download the file using the `gsutil` CLI!gsutil cp \'gs://cloudml-demo-lcm/SO_ml_tags_avocado_188k_v2.csv\' ./ 8231# Read, shuffle, and preview the datadata = pd.read_csv(\'SO_ml_tags_avocado_188k_v2.csv\', names=[\'tags\', \'original_tags\', \'text\'], header=0)data = data.drop(columns=[\'original_tags\'])data = data.dropna()data = shuffle(data, random_state=22)data.head()

這是預覽:

我們將使用80/20訓練/測試拆分,因此下一步是獲取數據集的訓練大小并拆分我們的問題數據:

train_size = int(len(data) * .8)train_qs = data[\'text\'].values[:train_size]test_qs = data[\'text\'].values[train_size:]

現在我們準備創建我們的Keras Tokenizer對象了。當我們實例化它時,我們需要選擇詞匯量大小。請記住,這是我們的模型從文本數據中提取的最常用的N個詞。此數字是超參數,因此您應根據文本語料庫中唯一字詞的數量嘗試不同的值。如果你選擇的值太低,你的模型將只識別所有文本輸入中常見的單詞(如\'the\',\'in\'等)。太大的詞匯大小將從每個問題中識別出太多的單詞,使得輸入矩陣變為大多數1。對于這個數據集,400就可以運作的剛剛好:

from tensorflow.keras.preprocessing import texttokenizer = text.Tokenizer(num_words=400)tokenizer.fit_on_texts(train_qs)bag_of_words_train = tokenizer.texts_to_matrix(train_qs)bag_of_words_test = tokenizer.texts_to_matrix(test_qs)

從tensorflow.keras.preprocessing導入文本預處理

現在,如果我們從bag_of_words_train打印第一個實例,我們可以看到它已被轉換為400元素的多熱詞匯表數組:

隨著我們的自由格式文本轉換為單詞矩陣包后,就可以將其輸入模型了。下一步是對我們的標簽進行編碼(這將是我們模型的輸出或預測)。

將標簽編碼為多熱陣列

使用Scikit-learn的多標簽二值化編碼標簽非常簡單。由于單個問題可以有多個標簽,所以我們希望我們的模型輸出多個熱門數組。在CSV中,我們的標簽當前是逗號分隔的字符串,如:tensorflow、keras。首先,我們將這些字符串拆分為標記數組:

tags_split = [tags.split(\',\') for tags in data[\'tags\'].values]

上面的字符串現在是一個2元素數組:[\'tensorflow\',\'keras\']。我們可以將這些標簽數組直接提供給多標簽二值化:

# Create the encoderfrom sklearn.preprocessing import MultiLabelBinarizertag_encoder = MultiLabelBinarizer()tags_encoded = tag_encoder.fit_transform(tags_split)# Split the tags into train/testtrain_tags = tags_encoded[:train_size]test_tags = tags_encoded[train_size:]

調用tag_encoder.classes_將輸出sklearn為我們創建的標簽查找:

[\'keras\' \'matplotlib\' \'pandas\' \'scikitlearn\' \'tensorflow\']

標記為“keras”和“tensorflow”的問題的標簽變為:

[1 0 0 0 1]

建立和訓練我們的模型

我們的模型輸入和輸出已經格式化,所以現在是時候實際構建模型了。 Keras Sequential Model API是我最喜歡的方法,因為代碼可以很容易地顯示模型的每一層。我們可以用5行代碼定義我們的模型。讓我們看看它然后分解它:

model = tf.keras.models.Sequential()model.add(tf.keras.layers.Dense(50, input_shape=(VOCAB_SIZE,), activation=\'relu\'))model.add(tf.keras.layers.Dense(25, activation=\'relu\'))model.add(tf.keras.layers.Dense(num_tags, activation=\'sigmoid\'))model.compile(loss=\'binary_crossentropy\', optimizer=\'adam\', metrics=[\'accuracy\'])

這是一個深度模型,因為它在輸入和輸出層之間有2個隱藏層。我們并不關心這些隱藏層的輸出,但我們的模型將使用它們來表示數據中更復雜的關系。第一層將我們的400元素詞匯矢量作為輸入,并將其轉換為50個神經元層。然后它需要把這50個神經元層轉換為25個神經元層。這里的50和25(圖層大?。┦浅瑓?,您應該嘗試最適合您自己的數據集的內容。激活=\'relu\'部分意味著什么?激活功能是模型計算每層輸出的方式。我們不需要確切地知道它是如何實現的(感謝Keras?。┧晕也粫谶@里詳細介紹ReLU的細節。我們最后一層的大小將等于我們數據集中的標簽數量(在本例中為5)。我們關心這一層的輸出,所以讓我們理解為什么我們使用了sigmoid激活函數。 Sigmoid將我們的5個輸出中的每一個轉換為0到1之間的值,表示特定標簽與該輸入相對應的概率。以下是標記為“keras”和“tensorflow”的問題的示例輸出:

[ .89 .02 .001 .21 .96 ]

請注意,因為一個問題在這個模型中可以有多個標簽,所以sigmoid輸出不會等于1。如果一個問題只能有一個標簽,我們將使用Softmax激活函數,而5元素輸出數組將加起來等于1。我們現在可以訓練和評估我們的模型:

model.fit(body_train, train_tags, epochs=3, batch_size=128, validation_split=0.1)model.evaluate(body_test, test_tags, batch_size=128)

對于此數據集,我們將獲得約96%的準確率。

使用SHAP解釋一批文本預測

我們有一個訓練有素的模型可以對新數據進行預測,所以我們可以就此打住。但在這一點上,我們的模型有點像黑盒子。我們不知道為什么它會預測特定問題的某些標簽,我們只是相信96%的準確度指標中它會做得很好。我們可以更進一步使用SHAP,一個用于解釋ML模型輸出的開源框架。這是有趣的一個部分 - 這就像獲得一個最喜歡的節目的后臺通行證,可以看到幕后發生的一切。在我的博客上,我介紹了SHAP,但我將在此處跳過詳細信息。當我們使用SHAP時,它會返回模型中每個要素的屬性值,以指示該要素對預測的貢獻程度。這對于結構化數據來說非常簡單,但它對文本有何用處?在我們的單詞模型中,SHAP會將我們400字詞匯表中的每個單詞視為一個單獨的特征。然后,我們可以將屬性值映射到詞匯表中的索引,以查看對模型預測貢獻最大(和最少)的詞。首先,我們將創建一個SHAP解釋器對象。有幾種類型的解釋器,我們將使用DeepExplainer,因為我們有一個深度模型。我們通過傳遞我們的模型和我們的訓練數據的子集來實例化它:

import shapattrib_data = body_train[:200]explainer = shap.DeepExplainer(model, attrib_data)

然后,我們將獲得測試數據子集上各個預測的屬性值:

num_explanations = 25shap_vals = explainer.shap_values(body_test[:num_explanations])

在我們看到哪些單詞影響單個預測之前,SHAP有一個summary_plot方法,它向我們展示了影響一批示例模型預測的主要特征(在本例中為25)。為了充分利用這一點,我們需要一種方法將特征映射到詞匯表中的單詞。 Keras Tokenizer創建了我們的頂級單詞的字典,因此如果我們將其轉換為列表,我們將能夠將歸因值的索引與列表中的單詞索引相匹配。 Tokenizer word_index被索引為1(我不知道為什么),所以我在查詢列表中附加了一個空字符串,使其為0索引:

# This is a dictwords = processor._tokenizer.word_index# Convert it to a listword_lookup = list()for i in words.keys(): word_lookup.append(i)word_lookup = [\'\'] + word_lookupAnd now we can generate a plot:shap.summary_plot(shap_vals, feature_names=word_lookup, class_names=tag_encoder.classes_)

這向我們展示了我們模型中最大的(正面或負面)單詞量,按標簽細分。 \'dataframe\'是我們模型使用的最大的信號詞,對Pandas的預測貢獻最大。這是有道理的,因為大多數Pandas代碼使用DataFrames。但請注意,它也可能是其他框架的負面信號詞,因為除非是兩個框架,否則你不太可能在TensorFlow問題中看到\'dataframe\'一詞。

用于個別預測的插入信號詞

為了可視化每個預測的單詞,我們需要深入了解上面創建的shap_vals列表。對于我們傳遞給SHAP的每個測試示例,它將為每個可能的標簽返回一個特征大小的數組(我們的示例為400),其中包含每個可能標簽的屬性值。我花了一些時間來解決這個問題,但是這樣想:我們的模型輸出不僅包括其最高概率預測,它還包括每個可能標簽的概率。所以SHAP可以告訴我們為什么我們的模型預測一個標簽為0.01%,另一個標簽為99%。下面是shap_values包含的細分:

接下來,讓我們使用這些屬性值來獲取給定預測的前5個最高和最低信令詞,并在給定輸入中突出顯示它們。為了使事情保持(相對)簡單,我只會顯示正確預測的信號詞。

我編寫了一個函數,使用彩色模塊打印藍色的最高信號字和紅色最低信號:

import coloredimport re def colorprint(question, pos, neg): # Split question string on multiple chars q_arr = [] q_filtered = filter(None,re.split("[, .()]+", question)) for i in q_filtered: q_arr.append(i) color_str = [] for idx,word in enumerate(q_arr): if word in pos: color_str.append(colored.fg("blue") + word) elif word in neg: color_str.append(colored.fg("light_red") + word) else: color_str.append(colored.fg(\'black\') + word) # For wrapped printing if idx % 15 == 0 and idx > 0: color_str.append(\'\\') print(\' \'.join(color_str) + colored.fg(\'black\') + " ")

最后,我編寫了一些代碼來調用上面的函數,并打印了一些隨機例子的信號字:

examples_to_print = [0,7,20,22,24]for i in range(len(examples_to_print)): # Get the highest and lowest signaling words for idx,tag in enumerate(pred_tag[0]): if tag > 0.7: attributions = shap_vals[idx][examples_to_print[i]] top_signal_words = np.argpartition(attributions, -5)[-5:] pos_words = [] for word_idx in top_signal_words: signal_wd = word_lookup[word_idx] pos_words.append(signal_wd) negative_signal_words = np.argpartition(attributions, 5)[:5] neg_words = [] for word_idx in negative_signal_words: signal_wd = word_lookup[word_idx] neg_words.append(signal_wd) colorprint(test_qs[examples_to_print[i]],pos_words, neg_words) print(\'\\')

這就產生了一個很好的視覺化的信號詞來表示個人的預測。以下是關于Pandas的正確預測問題的示例:

這向我們展示了我們的模型運行良好,因為它正在拾取Pandas獨有的準確信號詞,如\'column\',\'df1\'和\'nan\'(很多人都會問如何處理Pandas中的NaN值)。如果相反,像\'你\'和\'for\'這樣的常用詞具有較高的歸因值,我們想要重新評估我們的訓練數據和模型。此類分析還可以幫助我們識別偏差。以下是Keras問題的一個例子:

同樣,我們的模型選擇了Keras獨有的單詞來進行預測,比如\'lstm\'和\'dense\'。

將模型部署到Cloud AI Platform

我們可以使用新的自定義代碼功能將我們的模型部署到AI平臺。這將讓我們編寫在預測時運行的自定義服務器端Python代碼。由于我們需要將文本轉換為一個單詞矩陣包,然后將其傳遞給我們的模型進行預測,因此該功能特別有用。通過將原始文本直接傳遞給我們的模型并讓服務器處理轉換,我們將能夠使客戶端變得非常簡單。我們可以通過編寫一個Python類來實現這一點,我們對模型返回的值進行任何特征預處理或后處理。首先,我們將上面的Keras代碼轉換為TextPreprocessor類(改編自這篇文章)。 create_tokenizer方法使用提供的詞匯表大小實例化一個tokenizer對象,并將transform_textconverts文本轉換為一個單詞矩陣包。

from tensorflow.keras.preprocessing import textclass TextPreprocessor(object): def __init__(self, vocab_size): self._vocab_size = vocab_size self._tokenizer = None def create_tokenizer(self, text_list): tokenizer = text.Tokenizer(num_words=self._vocab_size) tokenizer.fit_on_texts(text_list) self._tokenizer = tokenizer def transform_text(self, text_list): text_matrix = self._tokenizer.texts_to_matrix(text_list) return text_matrix

然后,我們的自定義預測類利用它來預處理文本并將預測作為sigmoid概率列表返回:

import pickleimport osimport numpy as npclass CustomModelPrediction(object): def __init__(self, model, processor): self._model = model self._processor = processor def predict(self, instances, **kwargs): preprocessed_data = self._processor.transform_text(instances) predictions = self._model.predict(preprocessed_data) return predictions.tolist() @classmethod def from_path(cls, model_dir): import tensorflow.keras as keras model = keras.models.load_model( os.path.join(model_dir,\'keras_saved_model.h5\')) with open(os.path.join(model_dir, \'processor_state.pkl\'), \'rb\') as f: processor = pickle.load(f) return cls(model, processor)

要在AI平臺上部署模型,您需要擁有一個Google Cloud Project以及一個云存儲桶 - 您可以在此處放置已保存的模型文件和其他資產。首先,您需要使用gcloud CLI在AI Platform中創建模型(如果您從Python筆記本中運行此命令,請在gcloud命令前添加?。?。我們將使用以下內容創建模型:

gcloud ai-platform models create your_model_name

然后,您可以使用gcloud beta ai-platform版本創建部署模型。 --prediction-classflag將我們的模型指向它應該在預測時運行的Python代碼:

gcloud beta ai-platform versions create v1 --model your_model_name \\--origin=gs://your_model_bucket/ \\--python-version=3.5 \\--runtime-version=1.13 \\--framework=\'TENSORFLOW\' \\--package-uris=gs://your_model_bucket/packages/so_predict-0.1.tar.gz \\--prediction-class=prediction_class_file.CustomModelPredictionName

如果您導航到云控制臺的AI 平臺模型部分,您應該會在幾分鐘內看到您的模型已部署:

我們已經部署了模型以及一些用于預處理文本的自定義代碼。請注意,我們還可以使用自定義代碼功能進行后期處理。如果我這樣做,我可以將上面討論的所有SHAP邏輯放入一個新方法中,以便將SHAP屬性返回給客戶端并將它們顯示給最終用戶。

編譯出品

怎么申請pos機,要有什么條件?

安裝POS機要開對公帳戶,但是開對公帳戶對于個體工商戶來說是比較麻煩的,坦白的講那是不劃算,因為開對公帳戶所需要的條件是:

1、營業執照副本的復印件,蓋公章.

2、稅務登記證副本的復印件,蓋吵櫻碰公章.

3、組織機構代碼證副本的復印件,蓋公章.

4、銀行開戶許可證,蓋公章.

5、法人身份證的復印件,蓋公章.

光辦證所產生的費用就要幾百,試想一下這劃算嗎???

什么是最簡單的方法:以上是開對公帳戶,現在銀行這塊已經開展了對私帳戶的業務,其方法就是將POS機上面消費的金額直接匯到你的銀行卡上面,不僅節省了你寶貴的時間,又增加了效益,

1、提升企業形象:具備受理銀行卡的商戶意味著收單行,銀行卡組織的資信認可,體現商戶的檔次

2、擴大銷售額:銀行可以提高持卡人一定的免息期和透支額度,刷卡消費已經形成時尚,可以刺激消費,擴大升談銷售額.

3、及時入帳:由銀行提供結算服務,銷售款一般情況下1--3個工作日可以入帳,降低商會財務的工作強頌好度,提高財務的工作效率.

4、降低成本與風險:避免大量現金的收付,運送和保管,避免收銀員收取假幣.無需準備大量零錢和找付.減低了現金收付和保管的成本與風險.

5、便于銷售管理:POS機具可以打印當日交易流水和明細,便于掌握商戶當日和以往的交易明細.

pos機業務怎么跑?

pos業務很好跑,開始,只要勤奮,肯吃苦,,我的一個朋友,一開始很辛苦,每天都堅持跑到晚上八九點鐘,進屋發玩單頁就走了,感覺很累沒什么進展,每天一總結,有什么跑的不對的地方就改進,跑了三天就開單了,后來客戶越跑越多,在后來開發新客戶維護老客戶,沒事在公司發qq小廣告,只要你用心,會越來越輕松的,天道酬勤!

以上就是關于怎么開發pos機,我想構建一個能夠與開發人員產生共鳴的機器學習模型的知識,后面我們會繼續為大家整理關于怎么開發pos機的知識,希望能夠幫助到大家!

轉發請帶上網址:http://www.tonybus.com/news/12651.html

你可能會喜歡:

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 babsan@163.com 舉報,一經查實,本站將立刻刪除。