
如何快速實現REST API集成以優化業務流程
3.圖像轉文本:圖像字幕、OCR(光學字符識別) 圖像到文本結合使用卷積神經網絡 (CNN) 進行特征提取,并結合循環神經網絡 (RNN) 或 Transformer 生成相應的文本。OCR 技術專門采用二值化等圖像預處理技術,并采用 k-NN 或 SVM 等機器學習分類器。對于企業來說,領域LLM可以轉化為搜索引擎優化視覺內容的自動標記、發票的自動分類等等。
通過了解這些各種領域LLM功能的技術基礎和業務應用,企業可以就如何將領域LLM整合到其運營中以產生最大影響做出更明智的決策。
1.0 ChatIE:通過多輪問答問題實現實命名實體識別和關系事件的零樣本信息抽取
零樣本信息抽取(Information Extraction,IE)旨在從無標注文本中建立IE系統,因為很少涉及人為干預,該問題非常具有挑戰性。但零樣本IE不再需要標注數據時耗費的時間和人力,因此十分重要。近來的大規模語言模型(例如GPT-3,Chat GPT)在零樣本設置下取得了很好的表現,這啟發我們探索基于提示的方法來解決零樣本IE任務。我們提出一個問題:不經過訓練來實現零樣本信息抽取是否可行?我們將零樣本IE任務轉變為一個兩階段框架的多輪問答問題(Chat IE),并在三個IE任務中廣泛評估了該框架:實體關系三元組抽取、命名實體識別和事件抽取。在兩個語言的6個數據集上的實驗結果表明,Chat IE取得了非常好的效果,甚至在幾個數據集上(例如NYT11-HRL)上超過了全監督模型的表現。我們的工作能夠為有限資源下IE系統的建立奠定基礎。
LangChain的目的是為了開發應用,通過模塊組合的方式使用LLM,并與其他模塊組合的方式來創造應用。可以理解為Langchain本身并不提供LLM模型,只是對LLM抽象,把LLM當作一個功能模塊使用。LangChain能夠連接LLM的能力與目前已有的其他能力,創造能力更強大的應用。
實現原理如圖所示,過程包括加載文件 -> 讀取文本 -> 文本分割 -> 文本向量化 -> 問句向量化 -> 在文本向量中匹配出與問句向量最相似的top k個 -> 匹配出的文本作為上下文和問題一起添加到prompt中 -> 提交給LLM生成回答。 可以看到,核心是將本地答案數據集轉為向量存儲到向量數據,當用戶輸入查詢的問題時,把問題轉為向量然后從向量數據庫中查詢相近的答案topK 這個時候其實就是我們最普遍的問答查詢方案,在沒有大模型的時候就直接返回相關的答案整個流程就結束了。現在有大模型了可以優化回答內容的整體結構。 核心一:文本切割 核心二:embedding及向量化存儲 核心點三:LLM總結 通過embedding向量化文本后可根據需要召回TopK的chunk文檔,并按照類似如下的prompt template灌給大模型進行總結。
"""
已知信息:{context}
根據上述已知信息,簡潔和專業的來回答用戶的問題。如果無法從中得到答案,請說 “根據已知信息無法回答該問題” 或 “沒有提供足夠的相關信息”,不允許在答案中添加編造成分,答案請使用中文。
問題是:{question}
"""
AIGC(Artificial Intelligence Generated Content,人工智能生成內容)是一種利用人工智能技術生成各種形式內容的方法。這些內容包括文本、圖像、音頻、視頻等。
AIGC技術的應用范圍非常廣泛,包括但不限于以下幾個方面:
文本生成:使用自然語言處理技術,根據給定的輸入,自動生成符合語法和語義規則的文章、故事、廣告語等。 圖像生成:利用計算機視覺技術,根據給定的輸入,自動生成符合要求的圖片、海報、漫畫等。 音頻生成:使用語音合成技術,根據給定的文字或語音輸入,自動生成符合要求的音頻文件,如語音助手、語音導航等。 視頻生成:利用計算機視覺和語音識別技術,根據給定的輸入,自動生成符合要求的視頻文件,如智能監控、智能安防等。 AIGC技術的應用不僅可以提高內容生成的效率和質量,還可以降低內容制作的成本和風險。例如,在媒體和廣告行業,AIGC技術可以快速生成符合品牌調性和用戶需求的文章、圖片和視頻,提高品牌曝光和用戶粘性。在游戲行業,AIGC技術可以自動生成游戲場景、角色和道具等,提高游戲開發效率和質量。
LLM 進行圖像識別與傳統 OCR 對比時的主要缺點
LLM 的缺點
與傳統 OCR 的對比
今天我們來看的場景是 圖型驗證碼識別,使用公網大模型API起成本高效識別圖型驗證碼
提示詞
請對這張圖片進行OCR識別,并輸出最準確的驗證碼,直接輸出識別出的結果字符,不要輸出其他內容。
文心一言3.5
通義千問2.5
通義千問2-VL-開源版-7B
圖片理解qwen2-vl-7b
關于7B模型
一般來說,7B參數量的模型在推理時可能需要至少8GB到16GB的GPU顯存,但這只是一個粗略的估計。為了更準確地評估所需GPU顯存,建議參考該模型官方提供的文檔或測試環境中的具體要求。如果是在本地運行,還應該考慮是否進行了任何優化措施,比如混合精度訓練(使用FP16而非FP32),這可以有效減少所需的顯存量。如果您打算進行模型訓練而不是簡單的推理,那么可能還需要更多的顯存來存儲梯度信息和其他訓練過程中產生的數據。
KIMI
Gemini 1.5 Flash
做 OCR 效果非常好,可以在 Prompt 里面定制要輸出的格式,并且成本極低。 案例有寶玉反饋其朋友某公司使用第三方的OCR的服務,用來提取發票上的文字為結構化數據。但收費較高.
參考提示詞: *** Extract text from the provided image and organize it into a structured JSON format. ***
Google 每天為開發者免費提供15億個Token,其中 Gemini 1.5 Flash免費套餐包含: – 每分鐘15次請求(RPM) – 每分鐘100萬個Token(TPM) – 每天1,500次Token(RPD) – 免費上下文緩存服務,每小時最多可存儲100萬個Token – 免費微調 Gemini 1.5 Pro免費套餐包含: – 每分鐘2次請求(RPM) – 每分鐘32,000個Token(TPM) – 每天50次請求(RPD) 微調模型 text-embedding-004 提供: – 每分鐘1,500次請求(RPM) 除了前面說的 API,Google AI Studio 還為開發者提供免費訪問,其中 Gemini 1.5 Pro 有 2M Token上下文窗口。 價格頁面:https://ai.google.dev/pricing Google AI Studio:https://aistudio.google.com
發票識別示例場景
代碼實現
import os
import json
import base64
import requests
from datetime import datetime
class AliBailianImageService:
def __init__(self, configuration):
self.configuration = configuration
def get_api_key(self):
# 根據環境變量決定從哪里讀取 API Key
dev_environment_variable = os.getenv("ENVIRONMENT")
is_development = not dev_environment_variable or dev_environment_variable.lower() == "development"
if is_development:
# 開發環境從配置中讀取
api_key = self.configuration.get("DASHSCOPE_API_KEY")
else:
# 生產環境從環境變量讀取
api_key = os.getenv("DASHSCOPE_API_KEY")
# 若沒有配置環境變量,請用百煉API Key將下行替換為:api_key = "sk-xxx"
if not api_key:
print("API Key 未設置。請確保環境變量 'DASHSCOPE_API_KEY' 已設置。")
return None
return api_key
def get_image_base64_string_and_save(self, image_url):
response = requests.get(image_url)
if response.status_code != 200:
raise Exception(f"Failed to download image: {response.status_code}")
image_data = response.content
encoded_image = base64.b64encode(image_data).decode('utf-8')
# 可選步驟:保存圖片到文件
# filename = f"{uuid.uuid4()}.jpg"
# with open(filename, 'wb') as f:
# f.write(image_data)
return encoded_image
def send_post_request(self, url, json_content, api_key):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, data=json_content, headers=headers)
response_body = response.text
self.write_response_to_log(response_body)
if response.status_code >= 200 and response.status_code < 300:
return response_body
else:
return f"請求失敗: {response.status_code}"
def write_response_to_log(self, response_body):
log_file_path = "Logs/response.log"
log_dir = os.path.dirname(log_file_path)
if not os.path.exists(log_dir):
os.makedirs(log_dir)
with open(log_file_path, 'a') as f:
f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Response Body: {response_body}\n")
def get_results(self):
api_key = self.get_api_key()
if not api_key:
return None
encoded_image = self.get_image_base64_string_and_save(
"http://0.0.0.0/7661454/captchaimage?rnd=0.8717223995099175"
)
url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
json_content = {
"model": "qwen2-vl-7b-instruct",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "請對這張圖片進行OCR識別,并輸出最準確的驗證碼,直接輸出識別出的結果字符,不要輸出其他內容。"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded_image}"}}
]
}
]
}
json_content_str = json.dumps(json_content)
result = self.send_post_request(url, json_content_str, api_key)
print(result)
return result
if __name__ == "__main__":
# 示例配置
config = {
"DASHSCOPE_API_KEY": "your-api-key-here"
}
service = AliBailianImageService(config)
result = service.get_results()
if result:
print("Result:", result)
通義千問2-VL-開源版-2B
通義千問VL模型qwen2-vl-2b-instruct可以根據您傳入的圖片來進行回答,curl參考
curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \ -H "Authorization: Bearer $DASHSCOPE_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "model": "qwen-vl-max", "input":{ "messages":[ { "role": "user", "content": [ {"image": "https://img.alicdn.com/imgextra/i2/O1CN01y1lotD1hINrPr60fs_!!6000000004254-0-tps-1384-3024.jpg"}, {"text": "這是什么?"} ] } ] } }'
事實情況下獨立部署也可以
測試圖片進行識別
返回示例
[2024-11-06 16:14:22] Response Body: {"choices":[{"message":{"content":"\"bafy\"","role":"assistant"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":60,"completion_tokens":6,"total_tokens":66},"created":1730880859,"system_fingerprint":null,"model":"qwen-vl-plus","id":"chatcmpl-5a306496-300c-9815-8c50-35e98f15508d"}
目前僅供免費體驗,另一個官方示例是視覺語言模型輸出示例
傳統OCR工具提取的內容不完整且格式混亂。大模型不僅能精準提取圖片中的文字,還能以規整的形式輸出。
通義千問團隊以Apache 2.0協議開源了Qwen2-VL-2B和Qwen2-VL-7B,開源代碼已集成到Hugging Face Transformers、vLLM和其他第三方框架中。開發者可以通過Hugging Face和魔搭ModelScope下載使用模型,也可通過通義官網、通義APP的主對話頁面使用模型。
圖片理解
https://bailian.console.aliyun.com/#/model-market/detail/qwen2-vl-2b-instruct?tabKey=sdk
視覺理解
https://help.aliyun.com/zh/model-studio/user-guide/vision?spm=a2c4g.11186623.help-menu-2400256.d_1_0_2.5ef477e9sJEdx7&scm=20140722.H_2845871._.OR_help-V_1#f1cbd5b8a8k5w
阿里云百煉平臺:
https://help.aliyun.com/zh/model-studio/developer-reference/qwen-vl-api
GitHub:
https://github.com/QwenLM/Qwen2-VL
HuggingFace:
https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d
魔搭ModelScope:
https://modelscope.cn/organization/qwen?tab=model
模型體驗:
https://huggingface.co/spaces/Qwen/Qwen2-VL
https://qwen.readthedocs.io/en/latest/benchmark/speed_benchmark.html
文章轉自微信公眾號@機器學習AI算法工程