반응형

Python tech 37

[KoBERT] nlp.data.TSVDataset() 적용하기

KoBERT에 자신의 데이터를 적용하고 싶은 분들에게... KoBERT API중 pytorch 에서 dataset_train = nlp.data.TSVDataset("ratings_train.txt?dl=1", field_indices=[1,2], num_discard_samples=1) nlp.data.TSVDataset()에 본인의 데이터를 넣어줘야합니다. 이때 본인의 데이터 포맷은 tsv 파일이어야겠죠. 첫 번째 파라미터 : "tsv 파일명" field_indices : [학습시킬 데이터의 index, 데이터 레이블의 index] num_discard_samples : 데이터 상단에서 제외할 row의 개수 (default = 0) 예 시 1 TSV 파일 이름 : tsv_train_data.tsv [..

Python tech/NLP 2021.05.18

[KoBERT 에러] TypeError: dropout(): argument 'input' (position 1) must be Tensor, not str 해결 방법

KoBERT 사용 도중 만난 에러 분명 model에 input되는 parameters Type이 모두 Tensor였음에도 불구하고 Tensor로 입력하라는 에러.... 해결 방법 의외로 간단하다. transformers 설치 시, 기존 pip install transformers로 했다면 pip install transformers==3 으로 다시 설치해보자 주 의 Colab에서 사용한다면, !pip install transformers==3 이후에, 런타임 초기화 후 재실행 해야한다.

Python tech/NLP 2021.05.18

[KoBERT 에러] Illegal byte sequence Error #42 해결 방법

KoBERT 설치 후 실행 도중 get_pytorch_kobert_model() 함수를 실행중 나타난 에러입니다. 에러 내용 OSError: Not found: "C:\Users\사용자/kobert/kobert_news_wiki_ko_cased1087f8699e.spiece": Illegal byte sequence Error #42 Illegal byte sequence Error #42 관련 해결 내용은 많았지만, KoBERT 관련 내용은 찾지 못하다가 겨우 찾은 방법... 원 인 KoBERT 설치 파일 경로에 한글이 있어서 발생 해결 방법 1. kobert가 설치되어있는 파일을 찾아갑니다. 예시) C:/Users/사용자/kobert/ 2. kobert_news_wiki_ko_cased-1087f86..

Python tech/NLP 2021.05.18

[Python opencv] K-means 활용, 이미지 색상 개수 줄이기

Using cv2.kmeans, reduce number of color on image 지난번 "이미지 그림화" 포스팅에 더 개선된 알고리즘을 적용합니다. 실행 시간도 단축되었고, 그림화 및 색상 단순화 효과도 성능이 개선되었습니다. 지난 포스팅 https://tech-diary.tistory.com/19 K Means 알고리즘 ? k-means 알고리즘은 수많은 데이터를 k개로 클러스터링(clustering = 군집화) 해주는 알고리즘 다양한 데이터셋에 적용이 가능합니다. 비지도 학습 기반 알고리즘이기 때문에, 별도의 훈련 과정이 필요하지 않습니다. 더 자세히 알고 싶다면.... 위키백과 참고하시면 되겠습니다. https://ko.wikipedia.org/wiki/K-%ED%8F%89%EA%B7%A0..

[Python opencv] cv2 색상 구분 기준으로 라인 그리기

이미지에서 색상이 변경되는 곳에 점을 찍어주어 라인을 그려주는 방법입니다. 이미지에는 수십만 가지 색상이 존재합니다. 아무리 간단해 보이는 이미지도 수만 가지 이상은 됩니다. 따라서 색상을 기준으로 라인을 그리기 위해서 우선, 색상 단순화가 먼저 진행되어야 합니다. 색상 단순화 알고리즘은 여기서 확인할 수 있습니다. 링크 라라랜드 포스터를 가지고 실험을 해보겠습니다. 우선, 이미지에서 색상을 단순화시킵니다. 32개의 색상으로 단순화시킨 결과입니다. 이미지가 그림처럼 변환된 모습을 볼 수 있습니다. 그럼 이제 색상 변경 지점을 기준으로 선을 그려보겠습니다. import cv2 import numpy as np def drawLine(colorImage): # 라인 그려줄 캔버스 (input 이미지와 sha..

[Python] DFS, BFS 알고리즘

# 전역 변수 # 트리를 딕셔너리 형태로 표현 # Key: 노드 / Value : 하위 노드 list graph = { 1:[2,3,4], 2:[5], 3:[5], 4:[], 5:[6,7], 6:[], 7:[3] } DFS (깊이 우선 탐색, Depth First Search) 루트 노드(최상위)부터 리프 노드(최하위)까지 탐색한 후, 다시 올라와서 내려가는 방식 스택(Stack)을 활용할 수 있음 재귀(Recursion) 함수를 활용할 수 있음 # 재귀 함수 이용한 DFS # Input : 최상위 노드 값 def recursion_dfs(node, discovered=[]): discovered.append(node) # 탐색한 노드에 추가 for x in graph[node]: # 해당 노드 하위의 ..

[Python OpenCV] 이미지를 그림화 하기 (색 일반화)

OpenCV를 활용하여 이미지를 그림처럼 바꾸어주는 방법 먼저 이미지를 읽어줍니다. import cv2 import numpy as np image = cv2.imread("./test.jpg") 이미지를 Blur 처리 해주어야 합니다. Blur 종류에는 여러가지가 있는데, 이미지에서 라인(경계선)을 살리기 위해 bilateralFilter 방식을 적용합니다. 함수를 만들어 주겠습니다. def blurring( image, radius = 10, sigmaColor = 50 ) : qimg = image.copy() #이미지 복사 # 이미지 크기에 따라 blur 효과의 정도를 달리합니다. sigmaColor += (qimg.shape[1] * qimg.shape[0]) // 100000 radius +=..

[Python] Numpy Array를 DB (SQLite)에 저장하기

Image Processing 관련 project 진행 도중 numpy array를 sqlite3에 저장할 필요가 생겼습니다. 방법을 찾던 도중 가장 괜찮은 방법을 소개하겠습니다. 우선, 필요한 모듈을 import 해줍니다. import sqlite3, io 1. Numpy Array -> DB Text > DB에 INSERT 할 때, array를 text로 변경해주는 함수입니다. # nd.array to text when Insert DB def adapt_array(arr): """ http://stackoverflow.com/a/31312102/190597 (SoulNibbler) """ out = io.BytesIO() np.save(out, arr) out.seek(0) return sqlite..

[camelot] line_scale이란? (opencv로 라인 추출)

camelot은 사용자가 조절할 수 있는 파라미터가 다양합니다. 관련 포스팅 : tech-diary.tistory.com/13 파라미터를 조정해서 PDF에서 테이블을 조금 더 정확하게 추출할 수 있습니다. 파라미터는 lattice와 stream 방식에서 조금 차이가 있는데 그 중 lattice 방식에서 line_scale 이라는 이름의 파라미터가 있습니다. 이번 포스팅에서는 이 line_scale 이란 녀석이 어떤 목적인지, 어떻게 작동하는지를 분석해보겠습니다. line_scale이 사용되는 곳은 parser.Lattice() 클래스 내부의 _generate_table_bbox() 함수 내부입니다. path : parser > class Lattice > def _generate_table_bbox fr..

[camelot] read_pdf() 파라미터

Camelot이란? PDF 파일에서 표(Table, 이하 테이블)을 추출(Extract)해주는 Python 라이브러리 camelot을 사용하는 메인 방법은 read_pdf() 함수를 사용하는 것입니다. read_pdf()의 파라미터를 적절하게 적용시키면 PDF에서 테이블을 적절하게 추출하여 렌더링할 수 있습니다. 본 포스팅은 caemlot 공식 문서를 참고하였습니다. camelot-py.readthedocs.io/en/master/index.html 기본 사용법 camelot.read_pdf("./dir/file.pdf", pages="all") 첫 번째 인자로 pdf 파일 경로 두 번째 인자로 테이블을 추출할 페이지 범위를 설정해줍니다. 가장 기본이 되는 사용 방법입니다. 파라미터 우측에 [stream..