본문 바로가기

Engineering

View를 리턴하는 것과 Copy를 리턴하는 것 값을 판다스 객체에 넣을 때, chainedindexing이라는 것을 피하기 위해 주의를 기울여야 한다. 다음과 같은 예제를 생각해보자.In [382]: dfmi = pd.DataFrame([list('abcd'), .....: list('efgh'), .....: list('ijkl'), .....: list('mnop')], .....: columns=pd.MultiIndex.from_product([['one', 'two'], .....: .. 더보기
BrokenPipeError 분석 Python으로 멀티프로세스 코드를 작성하다보면 한번씩 BrokenPipeError를 만나게 된다. 이게 무슨 의미인지 이해하는 과정에서 찾아본 자료들을 정리하고자 한다.BrokenPipeError의 정의BrokenPipeError는 Pipe가 부러져서 생긴 오류라는 의미다. 그럼 Pipe가 무엇인지에 대해서 먼저 이해해야한다.파이프 (Pipe)Pipe는 운영체제에서 서로다른 프로세스의 입출력을 연결하는 방법을 의미한다. 예컨데, A 프로세스에서 생긴 출력을 B 프로세스의 입력으로 연결하는 수단을 Pipe라고 생각하면 이해하기 쉽다.파이프 연결 예시예를 들어, 아래와 같은 두 프로세스가 있다고 생각해보자.echo "hello"이 프로세스는 표준출력(stdout)에 "hello"라는 문자열을 쓴다(writ.. 더보기
json과 ujson의 차이점 JSONJSON은 파이썬의 다양한 객체를 직렬화(serialize)하는데 유용한 문법 중 하나이다. 객체가 복잡하게 구성되어 있더라도 강건하게 직렬화할 수 있고 직렬화된 결과물을 사람이 이해하기 쉽다는 점에서 강력한 장점을 보인다. JSON 인코더-디코더 라이브러리파이썬 객체를 JSON 형태의 문자열로 인코딩, JSON 형태의 문자열을 파이썬 객체로 디코딩해주는 여러 종류의 라이브러리 존재한다. 그 중, 파이썬 내장 라이브러리인 `json`과 패키지를 통해 설치가능한 `ujson`가 자주 사용된다.JSON과 UJSON의 미세한 구현 차이이 두 라이브러리는 문자열 객체를 인코딩하는 과정에서 미세한 차이점을 보인다. 예컨데, 문자열 객체 "http://www.naver.com"을 JSON으로 인코딩하면 다음.. 더보기
배열 내에 k번째로 작은 수 구하기 어떤 배열이 주어졌을 때, 그 배열 속에서 k번째로 작은 수를 구하는 일은 심심치 않게 발생한다. 나 같은 경우에는, 어떤 확률을 나타내고 있는 n차원 백터내에서 k번째로 큰 확률을 가진 클래스를 찾고 싶었다. 그럼 이를 어떻게 구현할 수 있을까? 가장 간단하게 떠오르는 방법은 (1) 주어진 벡터를 오름차순으로 정렬한 뒤 (인덱스를 알고싶다면 인덱스도 함께 저장), (2) k번째 값을 찾는 것이다. 해당 방법은 O(nlogn)의 시간복잡도를 가지며 적당한 시간 내에 끝나기 때문에 실용적이다. 하지만, 이것보다 더 빠르게 구현할 수 있는 방법이 있을까?검색 알고리즘 (selection algorithm)이번에 찾아보면서 알게 되었는데 배열 속에서 k번째로 작은 수를 구하는 문제는 알고리즘 분야에서는 꽤나 .. 더보기
Instruction tuned model과 eos 토큰 인스트럭션 튜닝이 된 모델을 사용하다가 eos 토큰을 어떻게 써야하는지 탐색해보았다.사용한 모델은 CodeLlama-Instruct-7B, Temperature는 0.2, TopP 0.95, Max Tokens 64으로 생성하고, eos토큰 ()가 나오면 생성을 멈추도록 구성했다. 파이썬 문제를 구현하는 MBPP 테스크로 실험했다.싱글턴 실험 (제로샷)CodeLlama-Instruct에 맞는 인스트럭션 템플릿으로 구성하고, 인스트럭션을 가져와서 프롬프트를 만들어봤다.[INST] > Write Python function to complete the task and pass the assertion tests. >Task:These are the assertions for your function:asse.. 더보기
Github Private Repo로 Fork하기 때때로 깃허브에 있는 레포지토리를 포크해서 사용하고 싶을 때가 있다. 하지만 깃허브에서 포크를 하게되면 공개 레포지토리로 만들어지고 비공개로 돌릴 수도 없어 비공개로 개발하고 싶을 때 불편한 점이 있다. 이를 우회해 비공개 레포지토리로 포크하는 방법이 잘 알려져 있고 이를 간략하게 정리하고자 한다.출처: https://gist.github.com/0xjac/85097472043b697ab57ba1b1c7530274 Create a private fork of a public repositoryCreate a private fork of a public repository. GitHub Gist: instantly share code, notes, and snippets.gist.github.com먼저, .. 더보기
파이썬 문자열 함수 훑어보기 요즘 문자열 처리를 자주 하게 되는데 기본적인 함수도 똑바로 알고있지 않은 것 같아서 파이썬에서 제공하는 문자열 함수를 훑어보고 이해도를 높이기로 했다. 참고한 문서는 다음과 같다. Built-in TypesThe following sections describe the standard types that are built into the interpreter. The principal built-in types are numerics, sequences, mappings, classes, instances and exceptions. Some colle...docs.python.org관련있다고 생각되는 함수들끼리 그룹화했고, 내 기준으로 중요한 순서대로 함수를 하나씩 소개하겠다.문자열 검증 함수주어진 .. 더보기
허깅페이스 데이터셋 업로드하기 머신러닝 연구를 하다보면 다양한 데이터셋에 활용하게 된다. 예전에는 인터넷에서 크롤링을 하거나, 다른 논문의 저자가 업로드해둔 데이터셋을 다운로드 받아서 사용하는 등 데이터셋에 접근하는 방식이 각양각색이었다. 그런데, 어느 날 데이터셋에 통합적으로 접근할 수 있는 라이브러리가 생겼고 이것이 허깅페이스 데이터셋이다. 문득문득 이런걸 만들어서 배포해주는 허깅페이스를 비롯한 많은 오픈소스 개발자에게 감사하면서 살고 있다;; 어쨋든, 이렇게 통합된 라이브러리에 내가 새로운 데이터셋을 만들었을 때, 어떻게 이 새로운 데이터셋을 허깅페이스 라이브러리를 써서 접근할 수 있게 구성하는지 알아보고자 한다.csv 파일 준비하기주로 대부분의 정제된 데이터셋은 엑셀의 형태로 구성할 수 있다. 이미지나 비디오와 같은 멀티미디어.. 더보기