Pages

Friday, August 23, 2024

AI can't read between lines

One of my acquaintances make schedules for his colleague's daily leave schedule. Well, isn't it decided by the individuals themselves? Yet, there was a reason. The workplace has to be open for 7 days a week and employees are expected to take a leave for two days a week. If the selection is left to the individuals, they will certainly select specific weekdays(e.g. Saturday or Sunday), so he had to distribute the leave schedule himself.

But as you can imagine, the schedule can't be well randomized if it's done by hand. Even simple pseudorandom from your computer will generate far better result. So, he decided to use Microsoft Excel to automate the scheduling and get help from AI. And he tells the conditions:

  1. Each employee can take a leave of 8 days per month
  2. Weekday is not important, but the distribution needs some randomization
  3. The schedule should be overlapped as less as possible

Well, it seems to be fine until now. Isn't it? AI can generate some Excel spreadsheet. But when he added the following condition, AI goes brutal - its result generate error.

  • Each employee should be able to take a leave at least once per week

If you're good at dealing with Excel, you'll quickly understand it can't be accomplished by "pure" Excel without support of VBA macros. To satisfy the above conditions I need to know when others are taking a leave, but for the others the same applies. To know me I've got to know you, but to know you I've got to know myself, ....... Yep. A typical "recurring reference" situation. If you add such conditions, AI will just "give it up" and will tell whatever it wants to say. Forget prompt engineering. The best answer shall be "it should be done with VBA macros", or it can't make it happen like a magic.

Did you decide to develop a dedicated application software program? Yet still you've got to consider a lot. Scheduling leave schedule for a month, you need to avoid overlapping as much as possible, consider weekly schedule when building the whole monthly schedule, and decide how to deal with non-full-weeks in front or end of the month. Many points to consider, and many exceptions to handle.

But, this is only valid only when you deal with the problem as it is. Yes. AS IT IS.

Thinking a bit further, you can simplify and reassemble the problem and it can be solved quite easily. If you've got to leave once a week, then you shall have leaves sufficient to leave at least once a week. If you divide the full month to number of leaves(in this case 30/8=3.75 days) and spread the leave schedule, all the employees can take a leave at least once a week. Of course in this case the randomization becomes limited when compared with original condition of "leave at least once a week", but from the employer's perspective, leaving only once a day for 3 weeks and leaving the remaining 5 days in week 4 will give him quite a headache. :P

Large Language Model(LLM) can understand the natural language and understand what he says. But, the core of LLM is statistics and probability, and based on which patterns are shown the most when we divide our language to syntactic word level. In other words, if a human gives a sentence, it has no problem in understanding it as it is, but reading so called "between the lines" or "hidden premise" and restructuring the problem itself-we call it a inference- is beyond the level current technology can achieve.

And yes, this is when human intervention is needed.

AI can generate source code, and some people say that developers won't be needed anymore, well, still it's only human who can "truly understand" the depth of the problem and reassemble in a way that the problem can be easily solved. And human acknowledges many conditions which are usually not given to AI. Though I don't know, I think this is related with prompt engineering.

So, my dear fellow software developers in the world! Now is not the time.
Until AI can "infer properly", your desk is safe!

인공지능은 행간을 읽지 못한다

지인 중 한 분이 직원들 휴가 일정을 짜고 있었습니다. 휴가 일정은 휴가 가는 본인이 알아서 짜야 되는거 아니냐...... 했는데, 알고보니 주 7일 로테이션 근무제였고, 직원들이 돌아가면서 일주일 중 이틀씩 쉬는 형태이고, 이걸 무조건 개인의 선호대로만 하면 특정 날짜에 사람이 몰린다던가 하는 문제가 있어서 부득이하게 선임이 직원들 휴일을 지정해주는 형태가 되었다 합니다.

그런데, 이게 무작위로 한다고 해도 사람이 직접 뿌리면 무작위가 될 리가 없지요. Pseudorandum이라고 해도 컴퓨터가 무작위로 뿌려주는게 사람이 직접 분산시키는 것보단 훨씬 낫다는 거야 자명한 사실입니다. 그래서, 그저 한 직장의 현장직 관리자로서 개발과는 아무런 연이 없던 이 분은 마이크로소프트 엑셀로 이를 자동화하기로 하고, AI 시스템의 도움을 얻기로 합니다. 그리고 조건을 거는데......

  1. 휴가 일정은 각 인원당 한 달에 8일
  2. 요일은 상관없으나 무작위성 필요
  3. 휴가 일정은 최대한 겹치지 않도록 배분

뭐, 여기까지는 어떻게든 된 것 같습니다. AI가 시키는데로 Excel에 넣기만 하면 척척 나오니까요. 다만 조건을 하나 더 추가하니까 AI가 슬슬 배째라 모드로 들어갑니다.

  • 1주일에 최소 한 번 이상 쉴 수 있어야 함

엑셀좀 만져보신 분들이라면 이 조건이 추가되는 순간 이 문제는 VBA 없이 순수(?)엑셀만으로는 절대로 해결이 불가능하다는 것이 바로 감이 잡히실 겁니다. 위의 조건을 모두 만족하려면 내가 언제 쉬었는지를 알아야 되는데, 그걸 알려면 다른 사람이 언제 쉬었는지를 알아야 되고, 이게 모든 사람들에게 공통적으로 적용됩니다. 즉, 나에 대해서 알려면 남을 알아야 되는데, 남을 알기 위해서는 나를 알아야 하고...... 예. 이건 전형적인 순환 참조 구문입니다. 당연한 이야기입니다만, 이런 조건을 AI에 추가하기 시작하면 그때부터 AI는 배를 째라는 식으로 나오죠. 프롬프트 엔지니어링을 백날 해봐야 구조적으로 불가능한걸 되게 할 수 있는 마법같은 뭐시기는 못 만들어냅니다. 아무리 잘 말해봐야 가장 좋은 답변은 "엑셀만으로는 안되고 VBA 등을 사용하셔야 합니다"일 겁니다.

엑셀을 사용하지 않고 아예 전용 프로그램을 개발하더라도 위 조건은 구현이 생각보다 그리 쉽지 않습니다. 한 달간의 일정을 짜는데, 가능한한 겹치지 않아야 되고, 월단위 일정을 따면서 주단위 일정의 구성에 신경을 써야 할 뿐 아니라, full week가 되지 않는 월초나 월말의 며칠은 어떻게 처리해야 될지도 신경을 써야 됩니다. 이래저래 신경써야 할 조건도 많을 뿐더러, 예외처리해야 할 부분도 한두개가 아니에요.

다만, 이건 어디까지나 문제를 액면 그대로 받아들였을 때의 이야기입니다.

조금만 생각해보면, 이 문제는 꽤나 간단하게 풀립니다. 이를테면, 휴가가 한 달에 8번이고, 일주일에 최소 한 번은 쉬어야 한다는 조건은, 뒤집어서 생각하면 휴가가 무조건 일주일에 한 번 이상 쉴 수 있도록 주어진다는 것입니다. 요컨데, 한 달을 휴가일수로 나눈 기간(여기서는 30/8=3.75일) 내에서 휴가를 균등하게 분산하면 일주일에 무조건 한 번 이상 쉴 수 있게 됩니다. 이 경우 원래 조건인 <일주일에 무조건 한 번 이상 쉰다>에 대한 무작위성이 제한되긴 하지만, 사업주 입장에서도 3주를 일주일에 한 번씩만 쉬고 네번째 주에 5일을 쉬는 엄한 결과를 내는 것보다는 저렇게 최대한 균등하게 배포하는 쪽이 직원들의 사기 등 관리에도 유리할 겁니다.

대규모 언어 모델(Large Language Model, LLM)은 사람의 자연언어를 분석하고 이해할 수 있을 정도까지 발달했습니다. 다만, LLM의 핵심은 통계고, 문장을 어절단위로 분석했을 때 어떤 패턴이 얼마나 자주 나타나는지를 학습한 결과에 기인합니다. 요컨데, 사람이 문장을 주면 그 문장 자체를 이해하는데는 아무런 문제가 없지만, 속칭 행간이라 불리는 보이지 않는 부분을 읽어 문제를 처음부터 다시 구성하는 등의 추론적 사고는 어렵다 하겠습니다.

그리고 당연한 이야기지만, 이 부분이 바로 사람이 필요한 부분이죠.

아무리 인공지능이 알아서 소스코드까지 짜주는 시대이고, 혹자는 앞으로 개발자는 필요없을 거라면서 회의론을 부르짖고 있지만, 문제를 제대로 이해하고 이를 토대로 문제를 해결할 수 있는 형태로 재구성할 수 있는 능력은 아직 사람만이 할 수 있는 것 같습니다. 그리고 사람은 AI에게 주어지지 않은 수많은 조건들을 알고 있지요(고객사 담당자의 성향이라던가, 말하지는 않았지만 당연히 되어야 한다고 생각하는 부분이라던가......). 잘 모르는 분야입니다만, 프롬프트 엔지니어링과도 통하는 바가 있지 않을까 하는 생각도 듭니다.

전세계의 개발자 여러분! 아직은 때가 아닙니다.
AI가 제대로 된 추론을 하지 않는 이상 여러분의 책상은 안전합니다.