網(wǎng)上有很多關(guān)于怎么開發(fā)pos機(jī),我想構(gòu)建一個(gè)能夠與開發(fā)人員產(chǎn)生共鳴的機(jī)器學(xué)習(xí)模型的知識(shí),也有很多人為大家解答關(guān)于怎么開發(fā)pos機(jī)的問題,今天pos機(jī)之家(www.tjfsxbj.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
怎么開發(fā)pos機(jī)
點(diǎn)擊上方關(guān)注,All in AI中國嗨,我是Sara Robinson,Google Cloud的開發(fā)者倡導(dǎo)者。我最近在Google Next 2019上與我的隊(duì)友Yufeng討論了構(gòu)建模型來預(yù)測Stack Overflow的問題標(biāo)簽。下面是演示的工作原理:
我們想要 ,因此Stack Overflow非常適合。為了訓(xùn)練高精度模型,我們需要大量的Stack Overflow數(shù)據(jù)。幸運(yùn)的是,BigQuery中存在這樣的數(shù)據(jù)集。此數(shù)據(jù)集包括定期更新的26 GB Stack Overflow問題表(您可以在此處瀏覽BigQuery中的數(shù)據(jù)集)。
在這篇文章中,我將介紹構(gòu)建模型,了解模型如何使用SHAP進(jìn)行預(yù)測,以及將模型部署到Cloud AI Platform。在這個(gè)例子中,我將向您展示如何構(gòu)建模型來預(yù)測Stack Overflow中的問題標(biāo)簽。為了簡單起見,我們的數(shù)據(jù)集包含了5個(gè)可能的ML相關(guān)標(biāo)簽的問題:
BigQuery有一個(gè)很棒的公共數(shù)據(jù)集,其中包含超過1700萬個(gè)Stack Overflow問題。我們將使用它來獲取我們的訓(xùn)練數(shù)據(jù)。為了使這個(gè)模型成為一個(gè)更難的問題,我們用鱷梨替換了數(shù)據(jù)集中的贈(zèng)品詞的每個(gè)實(shí)例(如tensorflow、tf、pandas、pd等)。否則我們的模型可能會(huì)使用“tensorflow”這個(gè)詞來預(yù)測一個(gè)問題被標(biāo)記為TensorFlow,這不是一個(gè)非常有趣的問題。由此產(chǎn)生的數(shù)據(jù)集有很多像下面這樣的:
您可以在此處以CSV格式訪問預(yù)處理的鱷梨填充數(shù)據(jù)集?!告溄印?/p>
什么是詞袋模型?
當(dāng)你開始剝?nèi)C(jī)器學(xué)習(xí)模型的層時(shí),你會(huì)發(fā)現(xiàn)它只是一堆矩陣乘法。無論模型的輸入數(shù)據(jù)是圖像、文本、分類還是數(shù)字,它們都將轉(zhuǎn)換為矩陣。如果你還記得代數(shù)類中的y = mx + b,這看起來很熟悉:
對(duì)于像圖像和文本這樣的非結(jié)構(gòu)化數(shù)據(jù)來說,這似乎并不直觀,但事實(shí)證明,任何類型的數(shù)據(jù)都可以表示為矩陣,因此我們的模型可以理解它。單詞包是將自由格式文本輸入轉(zhuǎn)換為矩陣的一種方法。在開始使用自定義文本模型時(shí),我最喜歡使用它,因?yàn)樗忉屜鄬?duì)簡單。想象一下您的模型的每個(gè)輸入都是一袋拼字方塊,其中每個(gè)方塊都是輸入句子中的單詞而不是字母。由于它是單詞的“包”,這種方法無法理解單詞在句子中的順序,但它可以檢測某些單詞的存在與否。要實(shí)現(xiàn)這一功能,您需要選擇一個(gè)詞匯表,其中包含整個(gè)文本語料庫中前N個(gè)最常用的單詞。這個(gè)詞匯表將是您的模型可以理解的唯一單詞。讓我們從Stack Overflow數(shù)據(jù)集中獲取一個(gè)超簡化示例。我們只預(yù)測3個(gè)標(biāo)簽(Pandas、keras和matplotlib),我們的詞匯量大小為10。想象一下,如果你正在學(xué)習(xí)一門新語言,你只知道這10個(gè)單詞:
數(shù)據(jù)幀層系列圖形列情節(jié)顏色軸read_csv激活現(xiàn)在讓我們假設(shè)有以下輸入問題:
如何繪制數(shù)據(jù)框條形圖的輸入將成為一個(gè)詞匯大小的數(shù)組(在本例中為10),表明特定問題是否包含我們?cè)~匯表中的每個(gè)單詞。上面的問題包含我們?cè)~匯中的3個(gè)單詞:plot、dataframe和graph。由于其他單詞不在我們的詞匯表中,我們的模型將不知道它們的含義?,F(xiàn)在我們開始將這個(gè)問題轉(zhuǎn)換成一個(gè)多字的單詞矩陣。我們最終將得到一個(gè)10元素的1和0數(shù)組,表示每個(gè)輸入示例中存在特定單詞的索引。由于我們的問題包含單詞dataframe,這是我們?cè)~匯表中的第一個(gè)單詞,所以詞匯表數(shù)組的第一個(gè)單元將包含1。我們?cè)谠~匯表數(shù)組的第4和第6位也會(huì)有一個(gè)1,表示這個(gè)句子中出現(xiàn)了情節(jié)和圖表。
以下是我們最終得到的結(jié)果:
[ 1 0 0 1 0 1 0 0 0 0 ]
即使情節(jié)出現(xiàn)在我們句子中的數(shù)據(jù)幀之前,我們的模型也會(huì)忽略這一點(diǎn),并對(duì)每個(gè)輸入使用我們的詞匯表矩陣。這個(gè)問題被標(biāo)記為pandas和matplotlib,因此輸出向量將為[1 0 1]。這是一個(gè)將所有內(nèi)容組合在一起的可視化:
使用Keras將文本轉(zhuǎn)換為單詞包
從我們的文本中取出前N個(gè)單詞,并將每個(gè)輸入轉(zhuǎn)換為N大小的詞匯矩陣聽起來像是需要完成很多工作。幸運(yùn)的是Keras有一個(gè)實(shí)用功能,所以我們不需要手工完成。我們可以在筆記本中完成所有這些工作(即將推出完整的筆記本電腦代碼?。?。首先,我們將CSV下載到我們的筆記本中,并從數(shù)據(jù)中創(chuàng)建一個(gè)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()
這是預(yù)覽:
我們將使用80/20訓(xùn)練/測試拆分,因此下一步是獲取數(shù)據(jù)集的訓(xùn)練大小并拆分我們的問題數(shù)據(jù):
train_size = int(len(data) * .8)train_qs = data[\'text\'].values[:train_size]test_qs = data[\'text\'].values[train_size:]
現(xiàn)在我們準(zhǔn)備創(chuàng)建我們的Keras Tokenizer對(duì)象了。當(dāng)我們實(shí)例化它時(shí),我們需要選擇詞匯量大小。請(qǐng)記住,這是我們的模型從文本數(shù)據(jù)中提取的最常用的N個(gè)詞。此數(shù)字是超參數(shù),因此您應(yīng)根據(jù)文本語料庫中唯一字詞的數(shù)量嘗試不同的值。如果你選擇的值太低,你的模型將只識(shí)別所有文本輸入中常見的單詞(如\'the\',\'in\'等)。太大的詞匯大小將從每個(gè)問題中識(shí)別出太多的單詞,使得輸入矩陣變?yōu)榇蠖鄶?shù)1。對(duì)于這個(gè)數(shù)據(jù)集,400就可以運(yùn)作的剛剛好:
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導(dǎo)入文本預(yù)處理
現(xiàn)在,如果我們從bag_of_words_train打印第一個(gè)實(shí)例,我們可以看到它已被轉(zhuǎn)換為400元素的多熱詞匯表數(shù)組:
隨著我們的自由格式文本轉(zhuǎn)換為單詞矩陣包后,就可以將其輸入模型了。下一步是對(duì)我們的標(biāo)簽進(jìn)行編碼(這將是我們模型的輸出或預(yù)測)。
將標(biāo)簽編碼為多熱陣列
使用Scikit-learn的多標(biāo)簽二值化編碼標(biāo)簽非常簡單。由于單個(gè)問題可以有多個(gè)標(biāo)簽,所以我們希望我們的模型輸出多個(gè)熱門數(shù)組。在CSV中,我們的標(biāo)簽當(dāng)前是逗號(hào)分隔的字符串,如:tensorflow、keras。首先,我們將這些字符串拆分為標(biāo)記數(shù)組:
tags_split = [tags.split(\',\') for tags in data[\'tags\'].values]
上面的字符串現(xiàn)在是一個(gè)2元素?cái)?shù)組:[\'tensorflow\',\'keras\']。我們可以將這些標(biāo)簽數(shù)組直接提供給多標(biāo)簽二值化:
# 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:]
調(diào)用tag_encoder.classes_將輸出sklearn為我們創(chuàng)建的標(biāo)簽查找:
[\'keras\' \'matplotlib\' \'pandas\' \'scikitlearn\' \'tensorflow\']
標(biāo)記為“keras”和“tensorflow”的問題的標(biāo)簽變?yōu)椋?/p>
[1 0 0 0 1]
建立和訓(xùn)練我們的模型
我們的模型輸入和輸出已經(jīng)格式化,所以現(xiàn)在是時(shí)候?qū)嶋H構(gòu)建模型了。 Keras Sequential Model API是我最喜歡的方法,因?yàn)榇a可以很容易地顯示模型的每一層。我們可以用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\'])
這是一個(gè)深度模型,因?yàn)樗谳斎牒洼敵鰧又g有2個(gè)隱藏層。我們并不關(guān)心這些隱藏層的輸出,但我們的模型將使用它們來表示數(shù)據(jù)中更復(fù)雜的關(guān)系。第一層將我們的400元素詞匯矢量作為輸入,并將其轉(zhuǎn)換為50個(gè)神經(jīng)元層。然后它需要把這50個(gè)神經(jīng)元層轉(zhuǎn)換為25個(gè)神經(jīng)元層。這里的50和25(圖層大?。┦浅瑓?shù),您應(yīng)該嘗試最適合您自己的數(shù)據(jù)集的內(nèi)容。激活=\'relu\'部分意味著什么?激活功能是模型計(jì)算每層輸出的方式。我們不需要確切地知道它是如何實(shí)現(xiàn)的(感謝Keras?。┧晕也粫?huì)在這里詳細(xì)介紹ReLU的細(xì)節(jié)。我們最后一層的大小將等于我們數(shù)據(jù)集中的標(biāo)簽數(shù)量(在本例中為5)。我們關(guān)心這一層的輸出,所以讓我們理解為什么我們使用了sigmoid激活函數(shù)。 Sigmoid將我們的5個(gè)輸出中的每一個(gè)轉(zhuǎn)換為0到1之間的值,表示特定標(biāo)簽與該輸入相對(duì)應(yīng)的概率。以下是標(biāo)記為“keras”和“tensorflow”的問題的示例輸出:
[ .89 .02 .001 .21 .96 ]
請(qǐng)注意,因?yàn)橐粋€(gè)問題在這個(gè)模型中可以有多個(gè)標(biāo)簽,所以sigmoid輸出不會(huì)等于1。如果一個(gè)問題只能有一個(gè)標(biāo)簽,我們將使用Softmax激活函數(shù),而5元素輸出數(shù)組將加起來等于1。我們現(xiàn)在可以訓(xùn)練和評(píng)估我們的模型:
model.fit(body_train, train_tags, epochs=3, batch_size=128, validation_split=0.1)model.evaluate(body_test, test_tags, batch_size=128)
對(duì)于此數(shù)據(jù)集,我們將獲得約96%的準(zhǔn)確率。
使用SHAP解釋一批文本預(yù)測
我們有一個(gè)訓(xùn)練有素的模型可以對(duì)新數(shù)據(jù)進(jìn)行預(yù)測,所以我們可以就此打住。但在這一點(diǎn)上,我們的模型有點(diǎn)像黑盒子。我們不知道為什么它會(huì)預(yù)測特定問題的某些標(biāo)簽,我們只是相信96%的準(zhǔn)確度指標(biāo)中它會(huì)做得很好。我們可以更進(jìn)一步使用SHAP,一個(gè)用于解釋ML模型輸出的開源框架。這是有趣的一個(gè)部分 - 這就像獲得一個(gè)最喜歡的節(jié)目的后臺(tái)通行證,可以看到幕后發(fā)生的一切。在我的博客上,我介紹了SHAP,但我將在此處跳過詳細(xì)信息。當(dāng)我們使用SHAP時(shí),它會(huì)返回模型中每個(gè)要素的屬性值,以指示該要素對(duì)預(yù)測的貢獻(xiàn)程度。這對(duì)于結(jié)構(gòu)化數(shù)據(jù)來說非常簡單,但它對(duì)文本有何用處?在我們的單詞模型中,SHAP會(huì)將我們400字詞匯表中的每個(gè)單詞視為一個(gè)單獨(dú)的特征。然后,我們可以將屬性值映射到詞匯表中的索引,以查看對(duì)模型預(yù)測貢獻(xiàn)最大(和最少)的詞。首先,我們將創(chuàng)建一個(gè)SHAP解釋器對(duì)象。有幾種類型的解釋器,我們將使用DeepExplainer,因?yàn)槲覀冇幸粋€(gè)深度模型。我們通過傳遞我們的模型和我們的訓(xùn)練數(shù)據(jù)的子集來實(shí)例化它:
import shapattrib_data = body_train[:200]explainer = shap.DeepExplainer(model, attrib_data)
然后,我們將獲得測試數(shù)據(jù)子集上各個(gè)預(yù)測的屬性值:
num_explanations = 25shap_vals = explainer.shap_values(body_test[:num_explanations])
在我們看到哪些單詞影響單個(gè)預(yù)測之前,SHAP有一個(gè)summary_plot方法,它向我們展示了影響一批示例模型預(yù)測的主要特征(在本例中為25)。為了充分利用這一點(diǎn),我們需要一種方法將特征映射到詞匯表中的單詞。 Keras Tokenizer創(chuàng)建了我們的頂級(jí)單詞的字典,因此如果我們將其轉(zhuǎn)換為列表,我們將能夠?qū)w因值的索引與列表中的單詞索引相匹配。 Tokenizer word_index被索引為1(我不知道為什么),所以我在查詢列表中附加了一個(gè)空字符串,使其為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_)
這向我們展示了我們模型中最大的(正面或負(fù)面)單詞量,按標(biāo)簽細(xì)分。 \'dataframe\'是我們模型使用的最大的信號(hào)詞,對(duì)Pandas的預(yù)測貢獻(xiàn)最大。這是有道理的,因?yàn)榇蠖鄶?shù)Pandas代碼使用DataFrames。但請(qǐng)注意,它也可能是其他框架的負(fù)面信號(hào)詞,因?yàn)槌鞘莾蓚€(gè)框架,否則你不太可能在TensorFlow問題中看到\'dataframe\'一詞。
用于個(gè)別預(yù)測的插入信號(hào)詞
為了可視化每個(gè)預(yù)測的單詞,我們需要深入了解上面創(chuàng)建的shap_vals列表。對(duì)于我們傳遞給SHAP的每個(gè)測試示例,它將為每個(gè)可能的標(biāo)簽返回一個(gè)特征大小的數(shù)組(我們的示例為400),其中包含每個(gè)可能標(biāo)簽的屬性值。我花了一些時(shí)間來解決這個(gè)問題,但是這樣想:我們的模型輸出不僅包括其最高概率預(yù)測,它還包括每個(gè)可能標(biāo)簽的概率。所以SHAP可以告訴我們?yōu)槭裁次覀兊哪P皖A(yù)測一個(gè)標(biāo)簽為0.01%,另一個(gè)標(biāo)簽為99%。下面是shap_values包含的細(xì)分:
接下來,讓我們使用這些屬性值來獲取給定預(yù)測的前5個(gè)最高和最低信令詞,并在給定輸入中突出顯示它們。為了使事情保持(相對(duì))簡單,我只會(huì)顯示正確預(yù)測的信號(hào)詞。
我編寫了一個(gè)函數(shù),使用彩色模塊打印藍(lán)色的最高信號(hào)字和紅色最低信號(hào):
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\') + " ")
最后,我編寫了一些代碼來調(diào)用上面的函數(shù),并打印了一些隨機(jī)例子的信號(hào)字:
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(\'\\')
這就產(chǎn)生了一個(gè)很好的視覺化的信號(hào)詞來表示個(gè)人的預(yù)測。以下是關(guān)于Pandas的正確預(yù)測問題的示例:
這向我們展示了我們的模型運(yùn)行良好,因?yàn)樗谑叭andas獨(dú)有的準(zhǔn)確信號(hào)詞,如\'column\',\'df1\'和\'nan\'(很多人都會(huì)問如何處理Pandas中的NaN值)。如果相反,像\'你\'和\'for\'這樣的常用詞具有較高的歸因值,我們想要重新評(píng)估我們的訓(xùn)練數(shù)據(jù)和模型。此類分析還可以幫助我們識(shí)別偏差。以下是Keras問題的一個(gè)例子:
同樣,我們的模型選擇了Keras獨(dú)有的單詞來進(jìn)行預(yù)測,比如\'lstm\'和\'dense\'。
將模型部署到Cloud AI Platform
我們可以使用新的自定義代碼功能將我們的模型部署到AI平臺(tái)。這將讓我們編寫在預(yù)測時(shí)運(yùn)行的自定義服務(wù)器端Python代碼。由于我們需要將文本轉(zhuǎn)換為一個(gè)單詞矩陣包,然后將其傳遞給我們的模型進(jìn)行預(yù)測,因此該功能特別有用。通過將原始文本直接傳遞給我們的模型并讓服務(wù)器處理轉(zhuǎn)換,我們將能夠使客戶端變得非常簡單。我們可以通過編寫一個(gè)Python類來實(shí)現(xiàn)這一點(diǎn),我們對(duì)模型返回的值進(jìn)行任何特征預(yù)處理或后處理。首先,我們將上面的Keras代碼轉(zhuǎn)換為TextPreprocessor類(改編自這篇文章)。 create_tokenizer方法使用提供的詞匯表大小實(shí)例化一個(gè)tokenizer對(duì)象,并將transform_textconverts文本轉(zhuǎn)換為一個(gè)單詞矩陣包。
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
然后,我們的自定義預(yù)測類利用它來預(yù)處理文本并將預(yù)測作為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平臺(tái)上部署模型,您需要擁有一個(gè)Google Cloud Project以及一個(gè)云存儲(chǔ)桶 - 您可以在此處放置已保存的模型文件和其他資產(chǎn)。首先,您需要使用gcloud CLI在AI Platform中創(chuàng)建模型(如果您從Python筆記本中運(yùn)行此命令,請(qǐng)?jiān)趃cloud命令前添加!)。我們將使用以下內(nèi)容創(chuàng)建模型:
gcloud ai-platform models create your_model_name
然后,您可以使用gcloud beta ai-platform版本創(chuàng)建部署模型。 --prediction-classflag將我們的模型指向它應(yīng)該在預(yù)測時(shí)運(yùn)行的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
如果您導(dǎo)航到云控制臺(tái)的AI 平臺(tái)模型部分,您應(yīng)該會(huì)在幾分鐘內(nèi)看到您的模型已部署:
我們已經(jīng)部署了模型以及一些用于預(yù)處理文本的自定義代碼。請(qǐng)注意,我們還可以使用自定義代碼功能進(jìn)行后期處理。如果我這樣做,我可以將上面討論的所有SHAP邏輯放入一個(gè)新方法中,以便將SHAP屬性返回給客戶端并將它們顯示給最終用戶。
編譯出品
怎么申請(qǐng)pos機(jī),要有什么條件?
安裝POS機(jī)要開對(duì)公帳戶,但是開對(duì)公帳戶對(duì)于個(gè)體工商戶來說是比較麻煩的,坦白的講那是不劃算,因?yàn)殚_對(duì)公帳戶所需要的條件是:
1、營業(yè)執(zhí)照副本的復(fù)印件,蓋公章.
2、稅務(wù)登記證副本的復(fù)印件,蓋吵櫻碰公章.
3、組織機(jī)構(gòu)代碼證副本的復(fù)印件,蓋公章.
4、銀行開戶許可證,蓋公章.
5、法人身份證的復(fù)印件,蓋公章.
光辦證所產(chǎn)生的費(fèi)用就要幾百,試想一下這劃算嗎???
什么是最簡單的方法:以上是開對(duì)公帳戶,現(xiàn)在銀行這塊已經(jīng)開展了對(duì)私帳戶的業(yè)務(wù),其方法就是將POS機(jī)上面消費(fèi)的金額直接匯到你的銀行卡上面,不僅節(jié)省了你寶貴的時(shí)間,又增加了效益,
1、提升企業(yè)形象:具備受理銀行卡的商戶意味著收單行,銀行卡組織的資信認(rèn)可,體現(xiàn)商戶的檔次
2、擴(kuò)大銷售額:銀行可以提高持卡人一定的免息期和透支額度,刷卡消費(fèi)已經(jīng)形成時(shí)尚,可以刺激消費(fèi),擴(kuò)大升談銷售額.
3、及時(shí)入帳:由銀行提供結(jié)算服務(wù),銷售款一般情況下1--3個(gè)工作日可以入帳,降低商會(huì)財(cái)務(wù)的工作強(qiáng)頌好度,提高財(cái)務(wù)的工作效率.
4、降低成本與風(fēng)險(xiǎn):避免大量現(xiàn)金的收付,運(yùn)送和保管,避免收銀員收取假幣.無需準(zhǔn)備大量零錢和找付.減低了現(xiàn)金收付和保管的成本與風(fēng)險(xiǎn).
5、便于銷售管理:POS機(jī)具可以打印當(dāng)日交易流水和明細(xì),便于掌握商戶當(dāng)日和以往的交易明細(xì).
pos機(jī)業(yè)務(wù)怎么跑?
pos業(yè)務(wù)很好跑,開始,只要勤奮,肯吃苦,,我的一個(gè)朋友,一開始很辛苦,每天都堅(jiān)持跑到晚上八九點(diǎn)鐘,進(jìn)屋發(fā)玩單頁就走了,感覺很累沒什么進(jìn)展,每天一總結(jié),有什么跑的不對(duì)的地方就改進(jìn),跑了三天就開單了,后來客戶越跑越多,在后來開發(fā)新客戶維護(hù)老客戶,沒事在公司發(fā)qq小廣告,只要你用心,會(huì)越來越輕松的,天道酬勤!
以上就是關(guān)于怎么開發(fā)pos機(jī),我想構(gòu)建一個(gè)能夠與開發(fā)人員產(chǎn)生共鳴的機(jī)器學(xué)習(xí)模型的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于怎么開發(fā)pos機(jī)的知識(shí),希望能夠幫助到大家!
